跳至内容
Topos Uranos

摘要

本课定义两个自然数的最大公因数与最小公倍数,并讲授两种计算方法:利用素因数分解,以及利用不需要分解因数的辗转相除法(欧几里得算法)。由这一算法推出裴蜀等式,即最大公因数是这两个数的整系数线性组合;再由它推出两个概念之间的关系、互素的数的刻画、分数的约分与加法,以及线性丢番图方程的完整解法,并应用于硬币问题与量取问题。

学习目标

  1. 利用素因数分解计算最大公因数与最小公倍数,并说明二者之间的关系。
  2. 运用辗转相除法及其扩展形式,求出最大公因数和裴蜀等式的系数。
  3. 识别互素的数,并利用最大公因数与最小公倍数进行分数的约分与加法。
  4. 判断线性丢番图方程是否有解,描述它的全部解,并将其应用于带有自然限制的问题。

最大公因数与最小公倍数

在关于整除与带余除法的课中,研究了两个自然数之间的关系 d∣ad \mid a。同时考虑两个数时,我们关心它们共有的因数和共有的倍数。每一对自然数 aa 与 bb 至少有一个公因数,即 11,并且至多有有限个公因数,因为 aa 的任何因数都不超过 aa;此外,它们有无穷多个公倍数,其中包括乘积 abab。若是如此,下面的定义就有意义。

定义(最大公因数与最小公倍数)。两个自然数 aa 与 bb 的最大公因数(记作 gcd⁡(a,b)\operatorname{gcd}(a, b))是同时整除二者的最大自然数。最小公倍数(记作 lcm⁡(a,b)\operatorname{lcm}(a, b))是同时为二者倍数的最小自然数。

后者是一个非空自然数集合的最小元,由良序原理它存在。前者是公因数集合的最大元,这个集合非空,并且以 aa 为上界;一个非空且有上界的自然数集合有最大元,这一点同样由良序原理得出:它的上界的集合非空,因而有最小元 MM,而 MM 属于该集合,因为否则每个元素都小于 MM,又因为 M−1M - 1 与 MM 之间没有自然数,每个元素都不大于 M−1M - 1,这样它就是一个小于 MM 的上界(若 M=1M = 1,则该集合为 {1}\{1\},它包含 MM)。例如,1212 与 1818 的公因数是 11、22、33 和 66,它们的公倍数是 3636、7272、108108,依此类推:

gcd⁡(12,18)=6,lcm⁡(12,18)=36\operatorname{gcd}(12, 18) = 6, \qquad \operatorname{lcm}(12, 18) = 36

由定义立即得到一些特殊情形:gcd⁡(a,1)=1\operatorname{gcd}(a, 1) = 1 且 lcm⁡(a,1)=a\operatorname{lcm}(a, 1) = a;gcd⁡(a,a)=lcm⁡(a,a)=a\operatorname{gcd}(a, a) = \operatorname{lcm}(a, a) = a;并且,若 aa 整除 bb,则 gcd⁡(a,b)=a\operatorname{gcd}(a, b) = a 且 lcm⁡(a,b)=b\operatorname{lcm}(a, b) = b。此外,这两种运算都是对称的:两个数的顺序不影响结果。

利用素因数分解计算

由算术基本定理,每个大于 11 的自然数都能唯一地分解为素因数之积。宜把 aa 与 bb 用同样的素数 p1,…,pkp_1, \ldots, p_k 写出,对只在其中一个数中出现的素数允许指数为零:

a=p1α1p2α2⋯pkαk,b=p1β1p2β2⋯pkβka = p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_k^{\alpha_k}, \qquad b = p_1^{\beta_1} p_2^{\beta_2} \cdots p_k^{\beta_k}

自然数 dd 整除 aa,当且仅当在它的分解式中除了 aa 的素因数外不出现其他素数,并且每个素数的指数都不大于它在 aa 中的指数。由此可知,dd 同时整除 aa 与 bb,当且仅当每个素数在 dd 中的指数都不超过两个指数中的任何一个;因此,对每个素数取两个指数中较小的那个,就得到最大的公因数。同样,mm 是公倍数,当且仅当每个素数在 mm 中的指数都不小于这两个指数,而最小的公倍数对每个素数取两个指数中较大的那个。例如:

360=23⋅32⋅51⋅70,84=22⋅31⋅50⋅71360 = 2^3 \cdot 3^2 \cdot 5^1 \cdot 7^0, \qquad 84 = 2^2 \cdot 3^1 \cdot 5^0 \cdot 7^1
gcd⁡(360,84)=22⋅31⋅50⋅70=12,lcm⁡(360,84)=23⋅32⋅51⋅71=2520\operatorname{gcd}(360, 84) = 2^2 \cdot 3^1 \cdot 5^0 \cdot 7^0 = 12, \qquad \operatorname{lcm}(360, 84) = 2^3 \cdot 3^2 \cdot 5^1 \cdot 7^1 = 2520

这种方法很清楚,但它依赖于会分解因数,而分解大数的代价极高:目前还不知道任何快速的分解方法。下一节的算法只用除法、不分解因数就能计算最大公因数。