考虑我们有两个正整数X和Y的初始值。找到X和Y的最终值,这样将会有一些变化,如下 -
步骤1-如果X = 0和Y = 0,则终止过程,否则转到步骤2
步骤2-如果X> = 2Y,则设置X = X – 2Y,然后转到步骤1,否则转到步骤3
步骤3-如果Y> = 2X,则设置Y = Y – 2X,然后转到步骤1,否则结束该过程。
X和Y的值将在[0和1018]范围内,因此我们可以使用蛮力方法。
#include<iostream> using namespace std; void alterNumber(long long x, long long y) { while (1) { if (x == 0 || y == 0) break; if (x >= 2 * y) x = x % (2 * y); else if (y >= 2 * x) y = y % (2 * x); else break; } cout << "X: " << x << "\n" << "Y: " << y; } int main() { long long x = 12, y = 5; alterNumber(x, y); }
输出结果
X: 0 Y: 1