最大公约数、最小公倍数、辗转相除法的求解和证明
两个正整数的最大公约数(Greatest Common Divisor,GCD)在计算机中通常使用辗转相除法计算,最小公倍数(Least Common Multiple, LCM)可以使用GCD来计算。下面首先介绍GCD和LCM。然后介绍辗转相除法的计算形式,并证明为什么可以得出GCD。
最大公约数
性质
若正整数$\{a_1,a_2,...,a_n\}$的GCD为$r$,则$\{a_1/r,a_2/r,...,a_n/r\}$互质(GCD为1)。
充分性
假设正整数$\{a_1,a_2,...,a_n\}$的GCD为$r$,则它们可以被表示为$\{p_1r,p_2r,...,p_nr\}$。若$\{p_1,p_2,...,p_n\}$不互质,有最大公约数$r_1\ne 1$,则$\{a_1,a_2,...,a_n\}$的最大公约数为$r_1r$与假设不符。
必要性
显然成立:一系列正整数除以某一数,如果结果互质,则这个数是这些正整数的GCD。
多个数的最大公约数
任意正整数$\{a_1,a_2,...,a_n\}$都可以被它们对应的所有质因子的乘积表示。将它们所有质因子分别表示为集合$A_1,A_2,...,A_n$(多重集),则它们的最大公约数的质因子为
$\begin{aligned}&A_1\cap A_2\cap...\cap A_n\\=&(...((A_1\cap A_2)\cap A_3)\cap...)\cap A_n\end{aligned}$
因此多个数的GCD可以通过,两两数之间的GCD迭代求出。两个正整数的GCD则可以使用辗转相除法解决。
最小公倍数
性质
若正整数$\{a_1,a_2,...,a_n\}$的LCM为$R$,则$\{R/a_1,R/a_2,...,R/a_n\}$互质。
充分性
假设$\{a_1,a_2,...,a_n\}$的LCM为$R$,若$\{R/a_1,R/a_2,...,R/a_n\}$不互质,有公因子$r$,则有更小的公倍数$R/r$,与假设不符。
必要性
对于正整数$\{a_1,a_2,...,a_n\}$,假设存在正整数$R_1\ne R_2$,使得$\{R_1/a_1,R_1/a_2,...,R_1/a_n\}$互质,且$\{R_2/a_1,R_2/a_2,...,R_2/a_n\}$互质。
若$R_1/R_2=k$为正整数,则
$\{R_1/a_1,R_1/a_2,...,R_1/a_n\}=\{kR_2/a_1,kR_2/a_2,...,kR_2/a_n\}$
有$k$为因子,不互质,与假设不符。
若$R_1/R_2=k$不是整数,则
$\{R_1/a_1,R_1/a_2,...,R_1/a_n\}=\{kR_2/a_1,kR_2/a_2,...,kR_2/a_n\}$
不是正整数,与假设不符(互质前提是正整数)。
综上不可能存在两个或以上不同的$R$,使得$\{R/a_1,R/a_2,...,R/a_n\}$互质。
又由于最小公倍数$R$一定存在,使得$\{R/a_1,R/a_2,...,R/a_n\}$互质。所以这样的$R$只存在一个,且是LCM。
多个数的最小公倍数
上面证明得出,对于正整数$\{a_1,a_2,...,a_n\}$,只要获得某个$R$,使得$\{R/a_1,R/a_2,...,R/a_n\}$互质,这个$R$就是LCM。
将正整数表示为GCD和对应互质数的乘积
$\{a_1,a_2,...,a_n\}=\{p_1r,p_2r,...,p_nr\}$
令$R=p_1p_2...p_nr$,可以发现$\{R/a_1,R/a_2,...,R/a_n\}$互质(证明写下面)。因此$\{a_1,a_2,...,a_n\}$的LCM为
$\displaystyle R=p_1p_2...p_nr=\frac{a_1a_2...a_n}{r^{n-1}}$
互质证明
将$\{p_1,p_2,...,p_n\}$的所有质因子分别表示为集合$A_1,A_2,...,A_n$,显然有$A_1\cap A_2\cap...\cap A_n=\varnothing$。设全集$E=A_1\cup A_2\cup...\cup A_n$,则$\{R/a_1,R/a_2,...,R/a_n\}$的质因子集合为$\sim A_1,\sim A_2,...,\sim A_n$。由于
$\begin{aligned}&\sim A_1\cap\sim A_2\cap...\cap\sim A_n\\=&\sim(A_1\cup A_2\cup...\cup A_n)\\=&\sim E\\=&\varnothing\end{aligned}$
所以$\{R/a_1,R/a_2,...,R/a_n\}$互质。
辗转相除法
辗转相除法通过迭代计算两个正整数的GCD。每次用较小数对较大数取余,然后将较小数赋值到较大数,余数赋值到较小数,直到余数为0,此时较小数为最大公约数。
例子
计算319,377的最大公约数(算法迭代过程):
迭代 | 较大数 | 较小数 | 余数 |
0 | - | 377 | 319 |
1 | 377 | 319 | 58 |
2 | 319 | 58 | 29 |
3 | 58 | 29 | 0 |
得出最大公约数为29。
证明
假设正整数$a>b$,计算它们的最大公约数。首先计算出它们的余数$t$:
$a \, \text{mod}\, b = t$
则$a$可以表示为:
$a=pb+t$
其中$p$为$a/b$的正整数商。若$t=0$,则显然$b$为$a,b$的最大公约数。若$t\neq 0$,我们只需证明$\{a,b\}$与$\{b,t\}$有相同的最大公约数,迭代就可以进行下去。
将$\{a,b\}$的公约数表示为$r_1\in R_1$,$R_1=\{a,b的公约数\}$,则有:
$t =a-pb= p_ar_1-pp_br_1=(p_a-pp_b)r_1$
显然$\{a,b\}$的公约数$r_1$也是$t$的约数,因而$r_1$是$\{a,b,t\}$的公约数,有$R_1\subseteq R$,$R=\{a,b,t的公约数\}$。又因为$\{a,b,t\}$的公约数一定是$\{a,b\}$的公约数,所以有$R\subseteq R_1$。因此$R_1=R$。
将$\{b,t\}$的公约数表示为$r_2\in R_2$,$R_2=\{b,t的公约数\}$,则有:
$a =pb+t= pp_{b1}r_2+p_tr_2=(pp_{b1}+p_t)r_2$
显然$\{b,t\}$的公约数$r_2$也是$a$的约数,因而$r_2$是$\{a,b,t\}$的公约数,有$R_2\subseteq R$。与上同理,得出$R_2 = R$。
于是$R_1=R=R2$,因此,$\{a,b\}$与$\{b,t\}$有相同的最大公约数。