最大公約數與歐幾里得演算法

空軍發表於2013-04-15

最大公約數

《哈代數論》第1.1節首先對整除性作出定義:

稱一個整數 a 能被另一個整數 b (b≠0) 整除(divisible),假設存在第3個整數 c 使得 a = bc。用記號 b|a 來表示 a 被 b 整除,或 b 是 a 的一個因子(divisor)。

第2.9節給出了最大公約數的定義:

定義兩個不全為零的整數 a 和 b 的最大公約數(highest common divisor)d:如果 d 是能同時整除 a 和 b 的最大正整數。記為 d = (a,b)。於是有 (0,a) = |a|。可以用同樣的方法定義任意一組正整數 a,b,c,...,k 的最大公約數 (a,b,c,...,k)。

highest common divisor 或 highest common factor 是英國數學界對最大公約數的稱呼(本書作者G.H.哈代和E.M.賴特都是英國數學家),而更為普遍的說法是 gcd(greatest common divisor)。

第2.9節接著證明了下面這個重要的定理(注意:這裡我們所說的數都是指整數,因為這是數論):

定理25 對任意給定的不全為零的整數 a 和 b,令 d = (a,b),方程 ax + by = n 有整數解 x, y,當且僅當 d|n。特別地,ax + by = d 可解。

證明 對任意給定的不全為零的整數 a 和 b,考慮所有形如 ax + by 的整陣列成的集合 S,假設 c 是 S 中的最小正數(S 中含有正數是顯而易見的),如果 n 是 S 中任何一個正數,那麼對所有的 z,n - zc ∈ S。如果 r 是 n 被 c 除得到的餘數,且 n = zc + r,則有 r ∈ S 且 0 ≤ r < c。既然 c 是 S 中的最小正數,故有 r = 0 以及 n = zc。同樣的推理對 S 中的負數也成立。所以,S 是某個正數 c 的倍數 zc 組成的集合。由於 c 整除 S 中的每一個數,所以它必整除 a 和 b,於是 c ≤ d。另一方面,由 d|a, d|b 可得 d|(ax + by),所以 d 整除 S 中的每一個數,特別有 d|c。由此推得 c = d,於是 S 就是 d 的倍陣列成的集合。這就證明了定理。


歐幾里得演算法

第12.3節介紹了歐幾里得演算法(在中國稱為輾轉相除法,可追溯至東漢出現的《九章算術》):

假設 a ≥ b > 0。用 b 除 a 得到 a = q1b + r1,其中 0 ≤ r1 < b。如果 r1 ≠ 0,則可以重複這個程式得到 b = q2r1 + r2,其中 0 ≤ r2 < r1。如果 r2 ≠ 0,則有 r1 = q3r2 + r3,其中 0 ≤ r3 < r2。如此一直下去。非負整數 b, r1, r2, … 構成一個遞減序列,故必然有某個 n 使得 rn+1 = 0。這個程式中的最後兩步是
        rn-2 = qnrn-1 + rn (0 < rn < rn-1),
        rn-1 = qn+1rn
關於 r1, r2, … 的這一組方程稱為歐幾里得演算法

正如同下面的定理所指出的那樣,歐幾里得演算法包含了求 a 和 b 的最大公約數的常用程式。

定理207 rn = (a,b)。

證明 令 d = (a,b)。那麼,通過連續使用這個演算法,我們得到
        d|a, d|b → d|r1 → d|r2 → … → d|rn
所以 d ≤ rn。再次倒推回去,即得
        rn|rn-1 → rn|rn-2 → rn|rn-3 → … → rn|b → rn|a。
於是 rn 同時整除 a 和 b。由於 d 是 a 和 b 的公約數中的最大者,故得到 rn ≤ d,從而有 rn = d。


參考資料

  1. 哈代數論(第6版),[英]G.H.哈代 E.M.賴特 著,張明堯 張凡 譯,人民郵電出版社,2010年10月第1版
  2. An Introduction to the Theory of Numbers, 6th Edition, G. H. Hardy, Edward M. Wright, Oxford University Press, September 15, 2008
  3. 維基百科:輾轉相除法

相關文章