UNPKG

oi-wiki

Version:
55 lines (30 loc) 2.05 kB
最大公约数即为 Greatest Common Divisor,常缩写为 gcd 在 [素数](/math/prime) 一节中,我们已经介绍了约数的概念。 一组数的公约数,是指同时是这组数中每一个数的约数的数。而最大公约数,则是指所有公约数里面最大的一个。 那么如何求最大公约数呢?我们先考虑两个数的情况。 ### 两个数的 如果我们已知两个数 $a$ 和 $b$,如何求出二者的最大公约数呢? 不妨设 $a > b$ 我们发现如果 $b$ 是 $a$ 的约数,那么 $b$ 就是二者的最大公约数。 下面讨论不能整除的情况, $a = b \times q + r$,其中 $r < b$。 不难证明,$\gcd(a, b) = \gcd(b, r)$,这里两个数的大小是不会增大的,我们得到了关于两个数的最大公约数的一个递归求法。 ### 多个数的 那怎么求多个书的最大公约数呢?显然答案一定是每个数的约数,那么也一定是每相邻两个数的约数。我们采用归纳法,可以证明,每次取出两个数求出答案后再放回去,不会对所需要的答案造成影响。 ## 最小公倍数 ### 两个数的 首先我们介绍这样一个定理 —— 算术基本定理: > 每一个正整数都可以表示成若干整数的乘积,这种分解方式在忽略排列次序的条件下是唯一的。 用数学公式来表示就是 $x = p_1^{k_1}p_2^{k_2} \cdots p_s^{k_s}$ $a = p_{a_1}^{k_{a_1}}p_{a_2}^{k_{a_2}} \cdots p_{a_s}^{k_{a_s}}$, $b = p_{b_1}^{k_{b_1}}p_{b_2}^{k_{b_2}} \cdots p_{b_s}^{k_{b_s}}$ 我们发现,对于 $a$ 和 $b$ 的情况,二者的最大公约数等于 $$ p_1^{k_{\min(a_1, b_1)}}p_2^{k_{\min(a_2, b_2)}} \cdots p_s^{k_{\min(a_s, b_s)}} $$ 最小公倍数等于 $$ p_1^{k_{\max(a_1, b_1)}}p_2^{k_{\max(a_2, b_2)}} \cdots p_s^{k_{\max(a_s, b_s)}} $$ 由于 $a + b = \max(a, b) + \min(a, b)$ 所以得到结论是 $\gcd(a, b) \times \operatorname{lcm}(a, b) = a \times b$ 要求两个数的最小公倍数,先求出最大公约数即可。 ### 多个数的