为什么整数算术需要新的语言
整数算术看似熟悉,但要证明关于整数的命题,不能只沿用实数除法的直觉。在实数代数中,a/b 通常是一个合法的实数;在整数论中,更重要的问题是:这个商能否仍然是一个整数?
这个问题会支撑后面的很多方法。它让我们定义质数、描述共同因子、有效计算最大公因数,并判断
ax+by=c
是否有整数解。
整除
定义
整除
设 a,b∈Z。若存在整数 d 使得
b=ad,则称 a 整除 b,记作 a∣b。此时 a 称为 b 的因数或除数。
定义中的“存在整数”是重点。例如 3∣15,因为 15=3⋅5;但 4∤15,因为不存在整数 d 使 15=4d。
几个边界情形要先说清楚:
- 任意整数都整除 0,因为 0=a⋅0;
- 0 只整除 0,因为 x=0⋅d 会迫使 x=0;
- ±1 整除所有整数;
- 若 a=0,则 a 和 −a 都整除 a。
定理
基本整除规则
设 a,b,c∈Z。
- 若 b=0 且 a∣b,则 ∣a∣≤∣b∣。
- 若 a∣b,则 (±a)∣(±b)。
- 若 a∣b 且 b∣c,则 a∣c。
- 若 a∣b 且 a∣c,则对任意 x,y∈Z,
a∣(bx+cy)。
第四条是后面经常使用的工具:若一个整数同时整除两个数,它也会整除这两个数的任意整数线性组合。例如 6∣18 且 6∣30,所以
6∣18x+30y
对所有整数 x,y 都成立。
证明线性组合规则时,写成 b=am、c=an,其中 m,n 为整数。
于是 bx+cy=a(mx+ny),新的乘数仍是整数。论证没有除以 a,
因此即使 a=0 也成立。
质数、合数与良序原理
定义
质数与合数
设 n∈Z+ 且 n>1。
- 若 n 的正因数只有 1 和 n,则 n 是质数;
- 若 n 不是质数,则 n 是合数。
整数 1 既不是质数,也不是合数。
等价地,n>1 是合数,正是指存在整数 n1,n2 满足
n=n1n2,1<n1,n2<n.
关于质数的证明常常依赖以下次序事实。
定理
良序原理
N={0,1,2,…} 的任意非空子集都有最小元素。
最小元素必须属于集合,下界则不必。实数区间 (0,1] 的下界是 0,
但没有最小元素,因为每个成员 x 都有更小的成员 x/2。也可由强归纳法
证明良序原理:若自然数子集没有最小元素,它不能含 0;若它不含
0,…,n,便不能含 n+1,否则后者就是最小元素。归纳可知该子集为空。
良序原理让我们可以使用“最小反例”论证。若某类坏整数非空,选出其中最小的一个,再证明它会产生更小的坏整数,便得到矛盾。
证明思路如下。假设结论错误,令 m 是最小的、大于 1 但没有质因数的整数。m 不可能本身是质数,所以 m=n1n2,其中 1<n1,n2<m。由 m 的最小性,较小的 n1 有质因数 p。又因为 p∣n1 且 n1∣m,所以 p∣m,矛盾。
若质数只有有限多个 p1,…,pN,考虑
n=p1p2⋯pN+1.
上一个定理保证 n 有某个质因数。这个质因数必须是列表中的某个 pi。但 pi 也整除乘积 p1p2⋯pN,所以它整除差
n−p1p2⋯pN=1,
这不可能。
最大公因数
定义
最大公因数
设 a,b∈Z。若 a,b 不同时为零,定义
gcd(a,b)=max{d∈Z:d∣a and d∣b}.若 a=b=0,则定义 gcd(0,0)=0。
当输入不全为零时,最大值存在,因为共同因数的绝对值受到限制。除了 a=b=0 的特殊情况外,gcd(a,b) 都是正整数。
改变符号不影响整除,所以 gcd(a,b)=gcd(∣a∣,∣b∣),特别地
gcd(a,0)=∣a∣。gcd(0,0)=0 是独立约定:每个正整数都整除两个零,
此时没有最大的正共同因数。
定义
互质
两个非零整数 a,b 若唯一的正共同因数是 1,则称它们互质。等价地,
gcd(a,b)=1.
当两个整数不同时为零时,最大公因数可用来移除它们的共同部分。若
d=gcd(a,b),
则
gcd(da,db)=1.
若 e 是 a/d,b/d 的正共同因数,则 de 是 a,b 的共同因数。
由 d>0 的最大性,de≤d,所以 e≤1,只能是 e=1。
排除 (0,0) 很必要,否则不能除以 d。
例如 gcd(126,140)=14,所以
140126=109,
而 9 与 10 互质。
除法算法
接下来的问题是计算性的:若不能事先列出所有共同因数,怎样求最大公因数?关键是带有受控余数的整数除法。
定理
除法算法
设 a,b∈Z 且 b=0。则存在唯一整数 q,r 使得
a=bq+r,0≤r<∣b∣.q 称为商,r 称为余数。
条件 0≤r<∣b∣ 不是附加装饰,而是唯一性的核心。例如
17=5⋅3+2
符合除法算法;但
17=5⋅2+7
不符合,因为余数 7 不小于 5。
先证明存在性。设 a≥0、b>0,考虑
S={a−bn:n∈N, a−bn≥0}.
因为 a∈S,良序原理给出最小成员 r=a−bq。若 r≥b,
则 r−b=a−b(q+1) 是更小的非负成员,矛盾。因此 0≤r<b。
若 a<0、b>0,则 A=a+(−a)b=(−a)(b−1) 非负。
用已证情形写成 A=bQ+r,整理得 a=b(Q+a)+r,余数范围不变。
若 b<0,先用正除数 B=∣b∣,再把商 Q 换成 −Q。
所有符号情形都不需要负余数。
再证明唯一性。设 a=bq+r=bq′+r′,两个余数都在规定范围内。
于是 b(q−q′)=r′−r,但 ∣r′−r∣<∣b∣。b 的非零整数倍
绝对值至少是 ∣b∣,故 r′=r。再由 b=0 得 q′=q。
严格上界保证唯一性;仅要求余数非负并不足够。
常见错误
不能忽略余数范围
只写 a=bq+r 并不足够。若不限制 r,同一个 a 可以有无限多种表示。条件 0≤r<∣b∣ 才会选出标准的商与余数。
最大公因数不变性与欧几里得算法
除法算法有用,是因为把 (a,b) 换成 (b,r) 不会改变最大公因数。
定理
最大公因数的一步不变性
若 a=bq+r,则
gcd(a,b)=gcd(b,r).
证明: 保留整个共同因数集合
目标是证明两个最大公因数相等。先证明更强的中间命题,论证会更直接:
整数 h 同时整除 a,b,当且仅当它同时整除 b,r。
正向用 r=a−bq,反向用 a=bq+r,两者都用整数线性组合的整除性质。
输入不同时为零时,两个因数集合相同,所以最大元素相同。若 a=b=0,
则 r=0,两边按约定都是 0。这个恒等式本身不要求余数范围;
余数范围的作用是保证算法向前推进。
概念视角算法
不变量与递减计算
每次替换 (a,b)↦(b,r),最大公因数保持不变,余数则变小。
两者各有作用:不变性保证最后答案就是原本的最大公因数,严格递减则保证
计算会结束。先取输入的绝对值,把较大的正数放在前面;若另一输入是零,
立即停止。其余每次带余除法都使用正除数。
例题
用欧几里得算法求 gcd(7224,1290)
反复使用除法算法:
72241290774516=1290⋅5+774,=774⋅1+516,=516⋅1+258,=258⋅2+0.最后一个非零余数是 258,所以
gcd(7224,1290)=258.
算法必然停止,因为余数形成严格递减的非负整数列:
r1>r2>r3>⋯≥0.
非负整数不可能无限地严格递减。
扩展欧几里得算法与 Bézout 恒等式
同一个计算可以倒推,将最大公因数写成原本两个数的整数线性组合。
例题
倒代回去
由前面的计算,
258=774−516.代入 516=1290−774:
258=774−(1290−774)=2⋅774−1290.再代入 774=7224−5⋅1290:
258=2(7224−5⋅1290)−1290=2⋅7224−11⋅1290.因此
258=7224⋅2+1290⋅(−11).
倒代也可整理成向前更新的系数。对正输入设 r0=a、r1=b,
保存 rk=ska+tkb,初始系数为 (s0,t0)=(1,0)、
(s1,t1)=(0,1)。若 rk+2=rk−qk+1rk+1,则
sk+2=sk−qk+1sk+1,tk+2=tk−qk+1tk+1.
代入两个已知线性组合即可证明更新式。系数始终是整数,最后非零余数那一行
便给出最大公因数所需的系数。
从欧几里得除法得到 Bézout 系数
向下的欧几里得计算和向上的倒代不是两个互不相干的技巧。它们是同一批带余除法等式的两种读法:先用来找最后非零余数,再把那个余数改写成原本两个整数的线性组合。
从欧几里得算法到 Bézout观看欧几里得算法如何先找出 gcd,再倒代成可用于整数方程的具体 Bézout 恒等式。
第一次带余除法
计算由 7224=1290*5+774 开始,所以下一对数是 (1290,774)。
gcd 不变量
若 a=bq+r,则 (a,b) 的正共同因数正好就是 (b,r) 的正共同因数。
余数链
余数 774, 516, 258, 0 说明最后非零余数是 gcd(7224,1290)=258。
倒代
把等式倒过来用,先得到 258=2*774-1290。
Bézout 组合
代入 774=7224-5*1290,得到具体恒等式 258=2*7224-11*1290。
方程判别
一次整数方程 ax+by=c 有整数解,当且仅当 gcd(a,b) 整除 c。
欧几里得算法向下经过越来越小的余数来求 gcd。扩展算法再把同一批等式倒过来读,把 gcd 写成 Bézout 组合,因此 gcd(a,b) 会控制 ax+by=c 何时有整数解。
定理
Bézout 恒等式
对任意整数 a,b,存在整数 x,y 使得
gcd(a,b)=ax+by.
对带符号的非零输入,先用 ∣a∣,∣b∣ 计算,再把原本符号吸收到系数中。
若一项为零,用 ∣a∣=asgn(a) 或 b 的对应等式;
若两项皆零,取 x=y=0。这样便证明恒等式的全部情形。
输入不同时为零时,最大公因数也是最小的正整数线性组合。恒等式保证它
确实是一个组合;其他正组合都是它的正倍数,不可能更小。若输入是 (0,0),
则没有正组合。
定理
互质判别
设 a,b 为非零整数。则 a,b 互质,当且仅当存在整数 x,y 使得
ax+by=1.
若 gcd(a,b)=1,这就是 Bézout 恒等式。反过来,若 ax+by=1,任何共同因数都必须整除 1,所以最大正共同因数只能是 1。
例题
扩展欧几里得表格的结果
对 12345 与 11111,欧几里得算法给出
1234511111123454=11111⋅1+1234,=1234⋅9+5,=5⋅246+4,=4⋅1+1,=1⋅4+0.所以最大公因数是 1。倒代或使用系数表格可得
1=12345(−2224)+11111(2471).相继的系数对为
(1,0), (0,1), (1,−1), (−9,10), (2215,−2461), (−2224,2471).例如余数 4 的系数来自 (1,−1)−246(−9,10)=(2215,−2461)。
下一行再由 (−9,10) 减去这一对,便得到上面的恒等式。
这特别证明 12345 与 11111 互质。
共同因数与 Euclid 引理
Bézout 恒等式也给出最大公因数的另一个重要刻画。
定理
共同因数整除最大公因数
对整数 a,b,n,
n∣a and n∣b⟺n∣gcd(a,b).
正向尤其有用。若 n 同时整除 a 和 b,则 n 整除任意线性组合 ax+by;特别地,它整除等于 gcd(a,b) 的 Bézout 线性组合。
定理
Euclid 引理
设 p 是质数。若 p∣ab,则 p∣a 或 p∣b。
若 p∤a,则 gcd(a,p)=1,所以存在整数 m,n 使
am+pn=1.
两边乘以 b 得
abm+pbn=b.
因为 p∣ab,左边两项都被 p 整除,所以 p∣b。
同一证明也给出不要求质数的消去规则:若 gcd(u,v)=1 且 v∣ut,
则 v∣t。把 Bézout 等式 uα+vβ=1 乘以 t,
左边两项都被 v 整除。这对带符号整数也适用,下面整数方程的参数步骤
正需要这个结论。
例如,若 a∣c、b∣c 且 gcd(a,b)=1,则 ab∣c。
由 a∣c 写成 c=at,其中 t 是整数。因为 b∣at,互素消去
给出 b∣t,所以 t=bk,从而 c=abk,其中 k 是整数。
互素条件不可省略:4∣12 且 6∣12,但 24∤12。
唯一质因数分解
定理
算术基本定理
每个大于 1 的正整数都可以写成质数乘积,而且这个乘积在不计因子次序下唯一。
存在性仍然来自最小反例法。若存在最小的、大于 1 且不能写成质数乘积的整数,它不可能是质数,因此可分解成两个更小的因数;但这两个较小因数已经可以分解成质数乘积,矛盾。
唯一性使用 Euclid 引理。若
p1p2⋯pr=q1q2⋯qs,
则 p1 整除右边乘积,所以 p1 必整除某个质因数 qj,从而 p1=qj。消去后重复同样论证。
反复使用 Euclid 引理,可以从整除有限乘积推到整除其中一个因子。
消去过程不能只耗尽一边的质数:否则 1 会等于非空质数乘积,而该乘积
大于 1。因此两边因子数相同,计入重数后的因子也相同。
对正整数 a,b,这个定理也给出比较指数的方法。若
a=p1m1⋯prmr,b=p1n1⋯prnr,
其中缺少的质数用指数 0 补上,则
gcd(a,b)=p1min(m1,n1)⋯prmin(mr,nr).
用同一记号,a∣b 当且仅当每个质数都满足 mi≤ni。
正共同因数最多含有 min(mi,ni) 个相应质因子;取齐这些允许的因子,
所得共同因数便被其他每个共同因数整除。带符号非零输入先取绝对值,
零输入则用最大公因数的约定处理。
例题
用质因数幂次求最大公因数
因为
144=24⋅32,60=22⋅3⋅5,所以
gcd(144,60)=22⋅31⋅50=12.
一次 Diophantine 方程
未知数 x,y 必须是整数的方程
ax+by=c
称为一次 Diophantine 方程。Bézout 恒等式可以完全判定它何时有解。
定理
可解条件
设 a,b,c∈Z,且 d=gcd(a,b)。方程
ax+by=c有整数解 (x,y),当且仅当 d∣c。
若解存在,因为 d 整除 a,b,所以 d 整除 ax+by=c。反过来,若 c=dr,由 Bézout 恒等式有 d=am+bn,因此
c=dr=a(mr)+b(nr).
所以 (mr,nr) 是一组解。
先设 a,b 都非零。已知一组解后,可以描述所有解。设 d=gcd(a,b)>0,并令
u=da,v=db.
若 (x0,y0) 是一组解,则所有解为
x=x0+kv,y=y0−ku,k∈Z.
这里须证明两件事。首先代入参数式,额外项 a(kv)−b(ku)=0 相消,
所以每个列出的整数对都是解。再证明完整性:从任意另一组解减去
(x0,y0) 的方程,得到
u(x−x0)=−v(y−y0).
由 gcd(u,v)=1 和消去规则,v∣(x−x0),故可写成
x−x0=kv。代回后消去非零整数 v,得 y−y0=−ku。
这才证明没有其他解;试出几个整数对不能证明完整性。
消去前须先处理零系数。若 a=0、b=0,当且仅当 b∣c 有解,
此时 y=c/b,x 可为任意整数。若 b=0、a=0,则在 a∣c
时有 x=c/a,y 任意。若 a=b=0,则 c=0 时所有整数对都是解,
c=0 时无解。这与 0∣c 当且仅当 c=0 一致,无须除以零的最大公因数。
例题
量水问题
若有 180 mL 的杯和 105 mL 的玻璃杯,能否量出刚好 30 mL?代数上,我们要判断
180x+105y=30是否有整数解。因为
gcd(180,105)=15且 15∣30,所以有解。
由扩展欧几里得算法,
15=180⋅3−105⋅5.乘以 2 得
30=180⋅6−105⋅10.所以一组解是 (x,y)=(6,−10)。因为 a/d=12 且 b/d=7,所有解为
(x,y)=(6+7k,−10−12k),k∈Z.
在量水解释中,正系数表示往桶中加入,负系数表示移走。先倒入六杯
180 mL,再移走十玻璃杯 105 mL,桶内剩下 1080−1050=30 mL。
整数解并不要求两个系数都非负。
快速检查
思考检查
以整数语言来说,a∣b 是什么意思?
解答 · 答案
它表示存在整数 d 使得 b=ad。
思考检查
为什么 a 和 b 的每个共同因数都会整除 ax+by,其中 x,y∈Z?
解答 · 答案
若 n∣a 且 n∣b,则 a=nr、b=ns,其中 r,s 是整数。因此 ax+by=n(rx+sy),而 rx+sy 仍是整数。
思考检查
在 7224 与 1290 的欧几里得算法中,为什么最大公因数是最后一个非零余数?
每一步都用 gcd(a,b)=gcd(b,r)。
解答 · 答案
每次除法都保留最大公因数,所以原本的最大公因数等于最后一个非零余数 258 与 0 的最大公因数,即 258。
思考检查
判断 ax+by=c 是否有整数解的条件是什么?
用 gcd(a,b) 表述。
解答 · 答案
方程有整数解,当且仅当 gcd(a,b)∣c。
练习
- 列出 84 的所有正因数,并求 gcd(84,60)。
- 用除法算法把 −37 写成 −37=5q+r,其中 0≤r<5。
- 用欧几里得算法求 gcd(252,198)。
- 将 gcd(252,198) 写成 252x+198y。
- 证明:若 n∣a 且 n∣b,则 n∣gcd(a,b)。
- 判断 35x+21y=14 是否有整数解;若有,求一组解。
- 判断 35x+21y=10 是否有整数解。
- 用质因数分解求 gcd(24⋅32⋅5,23⋅35⋅7)。
解答 · 参考解答 1
84 的正因数是 1,2,3,4,6,7,12,14,21,28,42,84。又
60=22⋅3⋅5,84=22⋅3⋅7,所以
gcd(84,60)=12。
解答 · 参考解答 2
余数要介于 0 和 4 之间。因为 −37=5(−8)+3,所以
q=−8,r=3。
解答 · 参考解答 3
252=198⋅1+54,198=54⋅3+36,
54=36⋅1+18,36=18⋅2+0。因此
gcd(252,198)=18。
解答 · 参考解答 4
倒代:
18=54−36=54−(198−3⋅54)=4⋅54−198。
又 54=252−198,所以
18=4(252−198)−198=4⋅252−5⋅198。
解答 · 参考解答 5
由 Bézout 恒等式,gcd(a,b)=ax+by。若 n 同时整除 a,b,
则 n 整除右边,因此整除 gcd(a,b)。
解答 · 参考解答 6
gcd(35,21)=7,且 7∣14,所以有解。直接验证
35(1)+21(−1)=14,所以 (x,y)=(1,−1) 是一组解。全部解为
(1+3k,−1−5k),其中 k 为整数,因为 35/7=5、21/7=3。
解答 · 参考解答 7
gcd(35,21)=7,但 7∤10,所以没有整数解。
解答 · 参考解答 8
比较每个质数的较小指数:
2min(4,3)3min(2,5)5min(1,0)7min(0,1)=23⋅32=72。