为什么"先除后乘"?a × b 可能大得超过 int 的范围(溢出),而 a ÷ GCD 一定 ≤ a,先除一步就把数字缩小了,再乘就安全了。
💻 C++ 怎么写
// 从大到小找第一个能同时整除 a 和 b 的数
int gcd(int a, int b) {
for (int i = min(a, b); i >= 1; i--) {
if (a % i == 0 && b % i == 0)
return i; // 从大到小试,第一个就是最大的
}
return 1;
}
int main() {
int a, b;
cin >> a >> b;
int g = gcd(a, b);
cout << "GCD = " << g << "\n";
cout << "LCM = " << a / g * b << "\n"; // 先除后乘,防溢出
return 0;
}