对于两个非零的数A,B(不妨假设A为较大的数)。若A/B为0,则 B是最大公因数。若不为0,不妨假设余数为C。这时不妨假设A,B的最大公因数为D。我们可以想到D必然是C的因数(因为A,B均是D的整数倍,A减去整数倍的B,那么余下的C也必然是D的整数倍)。那么问题就化简为寻找B,C的最大公约数。同里,通过不断的辗转相除,我们可以想到最后结果一定是大的数除以小的数为余数为0,小的 数成为最大公约数。因此,重复的操作让我们联想到递归。有了思路,代码便是一气呵成,再也不会忘记。
#include <iostream>
using namespace std;
int lcm(int A, int B) {
int temp1;
if (A < B) {
temp1 = A;
A = B;
B = temp1;
}
int temp2 = A % B;
if (A == 0 || B == 0) {
cout << "没有最大公约数" << endl;
return 0;
}
else
while (temp2!=0) {
temp2 = A % B;
A = B;
B = temp2;
}
cout << A << endl;
return 0;
}
int main(void) {
int a, b;
cin >> a >> b;
lcm(a, b);
return 0;
}