最大公约数与最小公倍数
欧几里得算法(计算最大公倍数)
设
$$ a = bq + r $$
同时 $a$ 和 $b$ 有共同约数 $t$
$$ a = ut $$
$$ b = vt $$
则
$$
a \mod b = (u - vq)t
$$
显然 $a \mod b$ 也有约数 $t$
可知 $a$ 和 $b$ 与 $a \mod b$ 有相等的最大公约数.
由此证明了
$$
\gcd(a, b) = \gcd(b, a \mod b)
$$
同时,我们有
$$
\gcd(a, 0) = a
$$
我们只需不断计算使 $a \mod b = 0$ 即可.
由此给出该算法的 C++ 实现
1 | |
计算最小公倍数
我们不加证明地给出
$$
lcm(a, b) = \frac{\left| a \times b \right|}{\gcd(a, b)}
$$
所以仅需计算 $ a \times b $ 和 $ \gcd(a, b) $ 即可.
实际应用中可能需要交换乘法和除法的顺序以避免溢出.
对于多个数的情况,有
$$
lcm(a1,a2,a3,…,an)=lcm(lcm(a1,a2),a3,…)
$$
C++实现
1 | |
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!