最大公约数 求解步骤:
1、若a,b全为0则它们的最大公约数不存在;
2、若a,b其中之一为零,则它们的最大公约数为非零的那个;
3、若a,b都不为零,则使 a = b; b = a % b; 重复该过程,直到b为零
最小公倍数 = a / 最大公约数 * b
原始式子应该为(a * b) / d
,但a * b
实际运算中可能溢出,故改为上述写法!
#include<cstdio>
#include<cstring>
using namespace std;
int gcd_1(int a, int b) {//递归代码
if (b == 0) return a;
else return gcd(b, a%b);
}
int gcd_2(int a, int b) {//非递归代码
while (0 != b) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
int main() {
int a, b;
while (scanf("%d %d", &a, &b) != EOF) {
printf("%d\n", gcd(a, b));//最大公约数
printf("%d\n", (a*b)/gcd_1(a, b));//最小公倍数
}
return 0;
}