oi-wiki
Version:
wiki for OI / ACM-ICPC
55 lines (30 loc) • 2.05 kB
Markdown
最大公约数即为 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$
要求两个数的最小公倍数,先求出最大公约数即可。
### 多个数的