**最大公约数(GCD)**可以用欧几里得算法快速求出。核心等式是:
gcd(a, b) = gcd(b, a mod b)
也就是说,每一轮把 (a, b) 变成 (b, a % b)。当 b 变成 0 时,当前的 a 就是最大公约数。
为什么能变小
a % b 一定小于 b,所以第二个数会不断下降。相比枚举所有可能因子,欧几里得算法通常只需要很少几轮。
复杂度
- 时间:O(log min(a, b))
- 空间:O(1)
在动画里看什么
- a / b 是当前这轮的两个数
- r 是
a mod b的结果 - 每轮计算
r后,把(a, b)更新成(b, r) - 当
b = 0,页面显示最终的 gcd