最小公倍数
约 10 分钟
两个数公共倍数里最小的,叫最小公倍数(LCM)。它和最大公约数是搭档:
道理是 把公共因数乘了两遍,除掉一份 就正好。
写代码时要"先除后乘",别真的先算 :
int lcm(int a, int b) {
return a / gcd(a, b) * b; // 先除,再乘,防溢出
}
为什么先除更安全?因为 可能大到爆掉 int,而 一定能被 整除,先除不会有小数损失,还把数值压小了,再乘 b 就不容易溢出。
常见坑:写成 a * b / gcd(a,b),a*b 先算就可能溢出,即使最终 LCM 不大也会错;多个数求 LCM 要两两滚动地做,中途仍可能溢出,必要时用 long long。记住"先除后乘"这四个字。
小纸条
为什么先除后乘更安全?
登录 后可看答案