feng xiaohan

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)}
$$