• 沒有找到結果。

大衍求一術與二元一次不定方程

N/A
N/A
Protected

Academic year: 2022

Share "大衍求一術與二元一次不定方程"

Copied!
7
0
0

加載中.... (立即查看全文)

全文

(1)

大衍求一術與二元一次不定方程

文耀光

摘要: 「大衍求一術」 是中國古代數學家秦九韶用以解一次同餘式組的方法。 本文旨在介紹何謂 大衍求一術,以及如何將之轉化為一遞歸求解形式 (recursive method of solution),並應用此 法求解二元一次不定方程。

I. 引言

給定兩個自然數 a 和 b, 要求取它們的 最大公因數 GCD(a, b) 有好幾種方法。 現時 香港小學數學課程裡討論的 「列舉法」、「質因 數分解法」 和 「短除法」 都是常用的方法。 不 過當 a 和 b 的數值很大時, 使用 「輾轉相 除法」(Euclidean Algorithm) 會比較方便 和快捷。 此法早在古希臘時代已經被發現, 並 且收錄在歐幾里德 (Euclid) 的名著 「幾何原 本」 (約公元前 300年) 之中, 其原理如下:

定理1: 設 a、b 是自然數, 且 a ≤ b。

若 b = aq + r, 其中 0 ≤ r < a, 則 GCD(a, b) = GCD(r, a)。

此定理表明, 如果 「輾轉」(意指重覆) 使 用除法, 可以求取任意兩個自然數的最大公 因數。 由於每次所產生的被除數 a 及除數 r, 都比原來的被除數 b 及除數 a 為小, 且 r 為

非負整數, 所以輾轉相除有限步之後, 一定會 產生以下的結果:

GCD(a, b) = GCD(r, a) = · · ·

= GCD(0, c) = c。

例1: 求 299 與 247 的最大公因數。

解:

1 299 247 4 247 208 1 52 39 3

39 39 13

(用247 除 299, 得商數 1 及餘數 52) (用 52 除 247, 得商數 4 及餘數 39)

(用 39 除 52, 得商數 1 及餘數 13) (用 13 除 39, 得商數 3 及餘數 0)

∴ GCD(247, 299) = GCD(52, 247)

86

(2)

= GCD(39, 52)

= GCD(13, 39)

= GCD(0, 13)

= 13。

輾轉相除法除了可以用來求最大公因數 之外, 還可以用來解不定方程。 它的原理是基 於以下的結果:

定理2: 設 a、b 為自然數。

若 d = GCD(a, b), 那麼不定方程 ax+ by = d 有整數解。

推論1: 設 a、b 為自然數。

若 GCD(a, b) = 1, 那麼不定方程 ax+ by = 1 有整數解。

定理3: 設 a、b、c 為自然數。

不定方程 ax + by = d 有整數解 當且 僅當 GCD(a, b)|d 。

有關這些定理的證明, 可以參考潘承彪 (1998), 此處從略。

例2: 求不定方程 299x + 247y = 13 的一般整數解。

解: 根據例1的算式, 將有餘數產生的每 一步用橫式表示, 可得:

299 = 247 + 52 247 = 4 × 52 + 39

52 = 39 + 13 把以上數式逐步倒推而上, 可得:

GCD(299, 247) = 13

= 52 − 39

= 52 − (247 − 4 × 52)

= 5 × 52 − 247

= 5×(299 − 247) − 247

= 5 × 299 − 6 × 247 由此求得 299x + 247y = 13 的一個特殊整 數解為 x0 = 5, y0 = −6。 設 k 為任意整數, 那麼:

299(x0+247k

13 ) + 247(y0− 299k

13 ) = 13, 所以 299x + 247y = 13 的一般整數解為:

x= 5 + 19k, y= −6 − 23k, 其中 k 為任意整數。

這種解不定方程 ax+by = GCD(a, b) 的方法, 稱為 Extended Euclidean Algo- rithm (參考 Biggs(1990), Niven(1991) 或 Geddes (1992))。 此法雖然簡單易明, 可是 在 「倒推」 的過程中需要不斷整理被除數和 除數的係數, 實在是一件相當繁複而且容易 出錯的工作。 那麼, 是否可以改良一下呢? 讓 我們在下一節為大家介紹。

II. 大衍求一術

中國人在求解一次同餘式組方面的歷史 是十分悠久的, 而且成就卓越。 大約在公元 280 至 420 年間出版的 「孫子算經」 之中, 記 載有一道聞名的一次同餘式問題 (簡稱 「孫子 問題」) 及其答案如下:

『今有物不知其數, 三三數之剩二, 五五 數之剩三, 七七數之剩二, 問物幾何?』 答曰:

『二十三』。

(3)

如果用現代的符號表示, 「孫子問題」 可 以記作以下的一次同餘式組:









x≡ 2 (mod 3) x≡ 3 (mod 5) x≡ 2 (mod 7)

(1)

如果要解同餘式組 (1), 先要解出一組 正整數 α、β、γ, 使其滿足以下的同餘式組 (2):









35α ≡ 1 (mod 3) 21β ≡ 1 (mod 5) 15γ ≡ 1 (mod 7)

(2)

為什麼呢? 因為如果 α、β、γ 存在的話, 那麼根據同餘式組 (2) 可得:









35α × 2 ≡ 2 (mod 3) 21β × 3 ≡ 3 (mod 5) 15γ × 2 ≡ 2 (mod 7) 由此得:









35α×2+21β ×3+15γ ×2 ≡ 2 (mod 3) 35α×2+21β ×3+15γ ×2 ≡ 3 (mod 5) 35α×2+21β ×3+15γ ×2 ≡ 2 (mod 7) 此時易知 35α × 2 + 21β × 3 + 15γ × 2 為同餘式組 (1) 的一個特殊解。 如果 x 是 另外一個解, 那麼 x − (35α × 2 + 21β × 3 + 15γ × 2) 必定是 3、5、7 的公倍數。 由於 lcm(3, 5, 7) = 105, 所以同餘式組 (1) 的解 可表為:

x≡ 35α×2+21β×3+15γ×2 (mod 105)。

明白了 「孫子問題」 的解法後, 可知解 決問題的關鍵在於先解出一組正整數 α、β、γ,

使其滿足同餘式組 (2)。 由於此題所牽涉的 數字比較小, 利用 「試誤法」 或 「大衍求一 術」(見以下敘述), 可以得出 α = 2, β = 1, γ = 1, 因此 「孫子問題」 的解是:

x≡ 70×2+63×1+30×1 ≡ 23 (mod 105)。

「孫子問題」 之解法, 可以推廣成為以下 的中國剩餘定理(Chinese Remainder The- orem):

定理3: (中國剩餘定理) 設 m1, m2, . . . , mk 是兩兩互質的自然數, 且 M = m1× m2× · · · × mk。 如果存在整數 αi(i = 1, 2, . . . , k) 使得

















M

m1α1 ≡ 1 (mod m1)

M

m2α2 ≡ 1 (mod m2) ...

M

mkαk ≡ 1 (mod mk) 那麼同餘式組:

















x≡ r1 (mod m1) x≡ r2 (mod m2)

...

x≡ rk (mod mk) 的解可表為: x ≡ mM

1α1r1+mM

2α2r2+ · · · +

M

mkαkrk (mod M)。

「孫子算經」 之後, 由西漢到宋朝的千餘 年間, 有很多天文學家和數學家都對一次同 餘式問題進行了研究, 到南宋的數學家秦九 韶手中, 便發展成為一個解聯立一次同餘式 組的系統方法, 稱為 「大衍求一術」, 記載在 他的著作 「數書九章」 之中。

所謂「大衍求一術」, 是指求整數 α 使其 滿足 αG ≡ 1 (mod m) 的方法, 其中 m、G

(4)

是給定的互質自然數, m 稱為 「定母」,G 稱 為 「衍數」, 而 α 為 「乘率」。 如果 m < G, 則先以 m 除 G, 得餘數 G1 (古書稱此為

「奇數」1), 然後求整數 α 使其滿足 αG1 ≡ 1(mod m)2。 根據 「數書九章」 所述, 求乘率 α 的步驟是 這樣的:

『置奇右上, 定居右下, 立天元一於左上。

先以右上除右下, 所得商數與左上一相生, 入 左下, 然後乃以右行上下以少除多, 遞互除之, 所得商數隨即遞互累乘, 歸左行上下 , 須使右 上末後奇一而止。 乃驗左上所得以為乘率, 或 奇數已見單一者便為乘率。』

這段古文的意思是說: 「運算開始時於 右上、 右下分別填上 G1 和 m, 然後於左上、

左下分別填上 1 和 0。 運算時把右上、 右下兩 數輾轉相除, 同時把除得的商數與左上、 左下 兩數輪流增乘, 直至右上數變成 1 為止, 此時 左上數即為所求之乘率 α。」

例3: 求同餘式 3800k ≡ 1 (mod 27) 的一個整數解。

解: 由於3800 > 27, 先以27除3800, 取 其餘數 20, 然後考慮等價的同餘式: 20k ≡ 1 (mod 27)。

第一步 1 20 (先在右上、 右下分別填 0 27 上 20和 27, 然後在左上、

左下分別填上 1和 0。)

第二步 1 20 (以 20 除 27, 得商數 1 及 1 7 餘數7。 把 7 填入右下,

並將 1 × 0 + 1 = 1 填 入左下。)

第三步 3 6 (以7 除 20, 得商數 2 及餘 1 7 數6。 把6填入右上, 並將

2×1+1 = 3 填入左上。) 第四步 3 6 (以6 除 7, 得商數 1 及餘

4 1 數1。 把1填入右下, 並將 1×3+1 = 4 填入左下。) 第五步 23 1 (以1 除 6, 得商數 5 及餘

4 1 數1。 把1填入右上, 並將 5×4+3 = 23 填入左上。) 由於右上數已等於 1, 此時左上數 k = 23 便是同餘式 3800k ≡ 1 (mod 27) 的解。

例4: 求同餘式 1155k ≡ 1 (mod 13) 的一個整數解。

解: 由於1155 > 13, 先以13除1155, 取 其餘數 11, 然後考慮等價的同餘式: 11k ≡ 1(mod 13)。

第一步 1 11 (先在右上、 右下分別填 0 13 上 11和 13, 然後在左上、

左下分別填上 1和 0。) 第二步 1 11 (以 11 除 13, 得商數 1 及

1 2 餘數2。 把 2 填入右下, 並將 1 × 0 + 1 = 1 填 入左下。)

1注意:這裡的所謂「奇數」 與我們現今所指的 「奇數」 是不同義的。

2讀者不妨想想為什麼同餘式αG ≡ 1(mod m)αG1≡ 1(mod m)是等價的?

(5)

第三步 6 1 (以2 除 11, 得商數 5 及 1 2 餘數1。 把 1 填入右上, 並將 5 × 1 + 1 = 6 填 入左上。)

由於右上數已等於1, 此時左上數 k = 6 便是同餘式 1155k ≡ 1 (mod 13) 的解。

很明顯,「大衍求一術」 與 「輾轉相除法」

的關係是十分密切的。 如果我們把 「大衍求一 術」 改寫成常用的 「輾轉相除法」 去求解一次 同餘式問題, 其實亦未嘗不可。

假設要求解之同餘式為 αG ≡ 1 (mod m), 其中 m、G 是給定的互質自然數。

那麼我們可以將 「大衍求一術」 簡化成以下的 遞歸關係 (recursive relations) 來計算乘率 α:









c0 = 1 c1 = q1

ck= qkck−1+ ck−2(1 < k ≤ n), 其中 n 代表輾轉相除時有非零餘數產 生的次數, 而 qk(1 ≤ k ≤ n) 代表每 次相除時產生的商數, 則所求乘率為 α ≡ (−1)ncn (mod m)。

此遞歸求解法是源自輾轉相除法的 「倒 推」 過程 (參考錢寶琮 (1964))。 要自行推導 這個遞歸關係並不困難, 讀者不妨一試, 此文 不會細表。 不過值得一提的是: 把乘率的解表 為 α ≡ (−1)ncn (mod m) 會比較將 n 分 成「奇」、「偶」 兩種情況 (參考袁小明 (1992)) 作個別處理會比較統一和簡潔, 而且更方便 把它編寫成電腦程式來進行機械化計算呢!

例5: 求同餘式 20k ≡ 1 (mod 27) 的 一個整數解。(參考例 3)

解:

2 20 27 1 14 20

6 6 7 1

6 6 1

(用20 除 27, 得商數 1 及餘數 7) (用 7 除 20, 得商數 2 及餘數 6)

(用 6 除 7, 得商數 1 及餘數 1) (用 1 除 6, 得商數 6 及餘數 0)

那麼, 我們有 n = 3, q1 = 1, q2 = 2, q3 = 1。 利用上述的遞歸關係, 得:

c1 = 1, c2 = 3, c3 = 4。

∴ 所求乘率為 k ≡ (−1)ncn ≡ −4 ≡ 23 (mod 27)。

例6: 求同餘式 1155k ≡ 1 (mod 13) 的一個整數解。(參考例 4)

解: 仿照例 4 的做法, 考慮等價的同餘 式: 11k ≡ 1 (mod 13)。

5 11 13 1 10 11

1 2 2 2

(6)

(用11 除 13, 得商數 1 及餘數 2) (用 2 除 11, 得商數 5 及餘數 1)

(用 1 除 2, 得商數 2 及餘數 0)

所以得 n = 2, q1 = 1, q2 = 5 及 c1 = 1, c2 = 6。 所求乘率為 k ≡ (−1)ncn ≡ 6 (mod 27)。

III. 以大衍求一術解不定方程

我們在第一節中討論過求解二元一次不 定方程的方法, 稱為 Extended Euclidean Algorithm。 此法雖然簡單, 但缺點是 「倒 推」 的過程相當繁複而且容易出錯。 如果使用 大衍求一術的話, 可以用較簡潔的步驟進行 計算, 現舉例說明如下:

例7: 求 21x + 15y = 123 的一般整數 解。

解: 先用輾轉相除法求 GCD(21, 15)。

1 21 15 2 15 12

6 3 2 6

(用15 除 21, 得商數 1 及餘數 6) (用 6 除 15, 得商數 2 及餘數 3)

(用 3 除 6, 得商數 2 及餘數 0)

由於 3|123, 所以21x + 15y = 123 有整數 解。 若先求得方程 21x + 15y = 3 的一個特 殊解 x0, y0, 則 21x + 15y = 123 的一般整 數解可表為: x = 41x0+5k, y = 41y0−7k,

其中 k 為任意整數。

很明顯, 滿足同餘式 15y ≡ 3(mod 21) 的乘 率可作為 y0。 引用輾轉相除法得: n = 2, q1 = 1, q2 = 2 及 c1 = 1, c2 = 3。

∴ y0 = (−1)ncn = 3。 代入 21x + 15y = 3 得 x0 = −2。 21x + 15y = 123 的一般整 數解可表為: x = −82 + 5k, y = 123 − 7k, 其中 k 為任意整數。

例8: 求不定方程 299x + 247y = 13 的一般整數解。(參考例 2)

解: 根據例 1 的輾轉相除法得: n = 3, q1 = 1, q2 = 4, q3 = 1 及 c1 = 1, c2 = 5, c3 = 6。 y0 = (−1)ncn = −6。

代入 299x + 247y = 13 得 x0 = 5。

∴ 299x + 247y = 13 的一般整數解可表 為: x = 5 + 19k, y = −6 − 23k, 其中 k 為 任意整數。

IV. 結語

大衍求一術是我國數學家秦九韶對數學 的一個卓越貢獻, 其重要性不僅僅是為解決 一次同餘式組提供了一個有效的方法, 更重 要的是它把輾轉相除法的逆推過程轉化為一 個簡單遞歸的求解形式, 大大減省了逆推時 不少繁複的簡化工作 (見例 2), 而其中一個 重要的應用就是本文所介紹的求解二元一次 不定方程的方法。

誠如吳文俊教授所言, 中國古代數學 家在解決數學問題時頗著重實用性和具有機 械化的特色, 對後世科研和教學都很有啟 發性。 例如吳文俊在 「吳文俊論數學機械

(7)

化」 一書中曾經指出: 要求解 9253k ≡ 1 (mod 225600) 這道題時, D. E. Knuth (美國史丹福大學著名教授及電腦科學家) 在 其名著 The Art of Computer Program- ming 中引述的 Euler 函數法, 即使利用一 台現代化電腦也很難快速地完成任務, 因為 要涉及 9253φ(225600) 的計算。 反之, 使用大 衍求一術則能很快完成任務。

筆者亦發覺, 現時許多新出版有關數論、

離散數學或數學算法的大專參考書籍 (例如 Biggs(1990), Niven(1991) 或 Geddes (1992)), 亦很少討論如何應用大衍求一術求 解不定方程的問題, 未免有點可惜。 由此引發 筆者的一點反思, 就是: 「如果僅把數學史作 一門獨立的數學科目來研究, 而不注重它與 其他數學分支的互相滲透; 又或僅閱讀或教 授數學史而不注重如何古為今用, 也許對數 學教育或科研方面是一個重大損失呢!」

參考書目

1. 袁小明 (1992)。「中國古代數學史略」。 河北:

河北科學技術出版社。

2. 李信明 (1998)。「中國數學五千年」。 臺北: 臺 灣書店。

3. 李兆華 (1995)。「中國數學史」。 臺北: 文津出 版社。

4. 吳文俊 (1995)。「吳文俊論數學機械化」。 濟 南: 山東教育出版社。

5. 劉鈍、 韓琦編 (1997)。「科史薪傳」。 遼寧: 遼 寧教育出版社。

6. 劉鈍 (1995)。「大哉言數」。 遼寧: 遼寧教育出 版社。

7. 錢寶琮 (1964)。「中國數學史話」。 香港: 香港 金文書店。

8. 文耀光、 梁志強、 吳銳堅 (1998)。「基礎數學 引論」(第 2 版)。 香港: 香港教育圖書公司。

9. 王懷權 (1997)。「數學的故鄉」。 臺北: 學英文 化事業有限公司。

10. 潘承彪 (1998)。「簡明數論」。 北京: 北京大學 出版社。

11. Norman Biggs (1990). Discrete Mathe- matics. Oxford: Clarendon Press.

12. I. Niven, H. S. Zuckerman & H. L.

Montgomery (1991). An Introduction to the Theory of Numbers (5th edition).

New York: John Wiley & Sons.

13. K. O. Geddes, S. R. Czapor & G.

Labahn (1992). Algorithms for Com- puter Algebra. Massachusetts: Kluwer Academic Publishers.

14. Jean-Claude Martzloff (1997). A His- tory of Chinese Mathematics. New York: Springer-Verlag.

15. D. E. Knuth (1968). The Art of Com- puter Programming: Semi-Numerical Algorithm (Vol. 2). Massachusett:

Addison-Wesley.

—本文作者任教於香港教育學院

參考文獻

相關文件

— 牛頓, 1643 – 1727 — Euler 關於這個級數的求和方法非常有創意是一個數學系學生應該具備的常識, 但事與願 違。 我在求學的階段並不知道這段有趣的歷史,

Andre Weil, Number Theory, Birk- hauser, 19833. —

在筆 者從事兩年微積分教學以後, 突然發現, 有一個內容其實特別適合大一新生乃至即將 升入大學的 高中生, 這就是高階等差數列的求和。 它本質上可以視為一種 「有限 (或離散)」 的 微積分,

這是一個頗有趣的組合問題, 不妨稱之為 「投信問題」。 有關它的解法有很多種, 本文會介 紹如何應用 「生成函數」 (Generating Functions)

如何將真分數分 解成相異 「單位分數」(即分子為 1 的分數) 的問題, 作者曾於 「古埃及的 單位分數問 題」 一文中已有論述, 所介紹的方法包括有 「埃及方法」 (Egyptian Method)、「斐

本文是我 們網路數學素材課程的一篇報告, 在撰寫過程中, 交通大學應數系黃大原老師, 給 我很 多寶貴的意見與指導, 尤其是最後完整的證明與表格, 黃老師將它呈現得更加完美, 使我們 的

由於極值定理保證了連續函數在閉區間上一定有最大或最小 值的存在,根據費馬定理,這些點若不是臨界點 (包含不可 微分的點)

在中學時期, 求方程式是代數學上面的重要課題。 在一元方程式方面, 我們學會了利用公 式求一元一次、 二次方程式的解, 也知道它們的圖形是直線或拋物線。 在圖形是曲線的一元三次 以上的方