问题描述:
给定两个整数 a 和 b,求它们的最大公因数和最小公倍数。
解决方案:
1、最大公因数可以使用辗转相除法求解,即:int gcd(int a, int b) { if (a < b) { swap(a, b); } while (b != 0) { int r = a % b; a = b; b = r; } return a;}
在上述代码中,我们首先比较 a 和 b 的大小,确保 a >= b。然后使用 while 循环执行辗转相除法求最大公因数,最终返回结果。
2、最小公倍数可以通过最大公因数求出,即:a * b / gcd(a, b)。因此,我们可以在调用 gcd 函数后直接计算得到:int lcm(int a, int b) { return a * b / gcd(a, b);}
结合上述两个函数,我们可以实现完整的程序:#include <iostream>using namespace std;int gcd(int a, int b) { if (a < b) { swap(a, b); } while (b != 0) { int r = a % b; a = b; b = r; } return a;}int lcm(int a, int b) { return a * b / gcd(a, b);}int main() { int a, b; cin >> a >> b; int max_common_divisor = gcd(a, b); int min_common_multiple = lcm(a, b); cout << "最大公因数:" << max_common_divisor << endl; cout << "最小公倍数:" << min_common_multiple << endl; return 0;}
希望这能帮助到你!
球一个最佳答案谢谢啦!这对我非常重要!   |