為何整數算術需要新的語言
整數算術看似熟悉,但要證明關於整數的命題,不能只沿用實數除法的直覺。在實數代數中,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。