PC/UVa:110703/10104
先做了7.6.7题,所以这道题就很好理解了。
因为欧几里得算法中参数a > b,所以算出来的x是正数,y是负数(不知道为什么,反正结果是这个)。x减小lcm(a, b) / a,y减小lcm(a, b) / b,有lcm(a, b) / a < lcm(a, b) / b,x减小的少,y增大的多,绝对值和会增大,所以书上的算法算出来的肯定是最小的。
#include <iostream>
using namespace std;
long long GCD(long long a, long long b, long long &x, long long &y)
{
if (a < b) return GCD(b, a, y, x);
else if (b == 0){
x = 1;
y = 0;
return a;
}
else{
long long g = GCD(b, a % b, x, y), tmp;
tmp = y;
y = x - a / b * y;
x = tmp;
return g;
}
}
int main()
{
long long A, B;
while (cin >> A >> B){
long long g, x, y;
g = GCD(A, B, x, y);
cout << x << ' ' << y << ' ' << g << endl;
}
return 0;
}
/*
4 6
17 17
*/
本文深入探讨了欧几里得算法在求解最大公约数问题中的应用,通过实例解析了算法的工作原理,并提供了一段C++代码实现,展示了如何在参数a大于b的情况下,通过递归方式找到两数的最大公约数及其线性组合。
222

被折叠的 条评论
为什么被折叠?



