最大公约数、最小公倍数、辗转相除法的求解和证明

  两个正整数的最大公约数(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\}$有相同的最大公约数。

上一篇:既约分数


下一篇:快速求得 a和 b 的最大公约数