math
辗转相除法(欧几里得算法)
用于求两个正整数的最大公约数(Greatest Common Divisor,GCD)。
基本思想:
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。
$$
gcd(a, b) = gcd(b, a mod b)
$$
// 递归
function gcd(a, b) {
return a % b ? gcd(b, a % b) : b;
}
// 迭代
function gcd(a, b) {
while (a % b) {
[a, b] = [b, a % b];
}
return b;
}
补充:扩展的欧几里得算法可用于 RSA 加密算法等领域。
最小公倍数(Leatest Common Multiple,LCM)
可以用最大公约数求得。
$$
lcm(a, b) = \frac{ab}{gcd(a, b)}
$$