| 程度: | 高中 |
| 閱讀時間: | 約 30分鐘 |
摘自︰劉薰宇的《數學趣味》民國二十三年版「韓信點兵」一章(p.195 - 236)
楔子
說起來已將近三十年了,那時我還只八歲,常常隨了我的祖父去會他的老友。有一次到一個小鹽商家去。他一見了我們祖孫倆走到攤頭,一邊拉長板凳一邊向祖父說:
「請坐請坐,好福氣,四孫少爺這般大了。」
「什麼福啊!奔忙福!」
「那裏,那裏,四孫少爺在進學校了吧!」
「不要這般叫孩子們……今年已隨着哥哥進學校了,在屋裏淘氣得很,還是去找個管頭的好。」
祖父說了,微笑着撫摸我的頭。鹽老闆和他說了一些古話,不知怎地,突然卻轉到了我的身上:
「在學校裏唸些什麼書?」
「國文算術.........」我這樣地回答。
「還學算嗎?好,給你算一個題,算得出,請你喫晚飯。」
這使我有點奇怪,我心裏猜不透他是叫我算乘法還是除法。我有些驚恐,怕他叫我算四則問題,我目不轉睛地看着他,他不慌不忙地說了出來:
「三個三個地數剩兩個,五個五個地數剩三個,七個七個地數也剩兩個,你算是幾個?」
我一聽了心裏非常高興,暗裏還有點驕傲,「這樣的題目,那個不會算!」這時我正好學完公倍數公約數,而且不久前還算過這樣的一個題目:
「某數以三除之餘二,以四除之餘三,以五除之餘四,以六除之餘五,問某數最小是若干?」
我把這兩個題目看着是一樣;牠們都是用幾個數去除一個數全除不盡。這第二個道題的算法,我還記得十分清楚,所以我覺得很有把握。不但這樣,我並且覺得這位老闆的題目有些不通,他不曾只問我一個最小的答數。當我這樣在肚裏尋思的時候,祖父便問道:
「算得出嗎?」
「算得出,不只一個答數。」
我這樣回答以後,那位老闆就恭維起我來了,向着祖父說:
「真好福氣!一想就想出來了,將來一定比大老爺還強。」
祖父又是一陣客氣,然後向着我,
「你說一個答數看。」
我所算過的題是先求出「三」「四」「五」「六」四個數的最小公倍數「六十」,然後減去「一」得「五十九」。我於是依樣先求「三」「五」「七」三個數的最小公倍數,心裏暗想着「三五一十 五、七五三十五、一百零五」。再就是要減去一個數了。我算過的題因為「以三除之餘二」 是差個一(3 - 2 = 1)就除盡,所以要減去「一」,現在「三個三個地數剩兩個」正是一樣的,也只要減去「一」,所以我就從一百零五當中減去一,而立刻回答道:
「頂小的一個數是一百零四,還有二百零九(104 + 105 = 209)也是的。」
我這時,在幼稚的心上感到得意,感到快樂,我期望着老闆的誇獎。豈知大出我意料之外!他說:
「一百零四,五個五個地數剩的是四個不是三個。」
這我怎麼不曾想到呢?於是我想那麼應當從一百零五當中減去二了(5 - 3 = 2)。我就說:
「一百零三。」
「三個三個的數只剩一了」
我窘極了,居然遭了這麼大的失敗。在我小時學數學,所遇到的窘迫,這是最大的兩次當中的一次,我覺得當着人失敗,非常害羞。我記得很清楚,我一隻手扯了衣角,一隻手揑緊拳頭,臉上如火燒一般地熱,低了頭儘管在心裏轉念頭,把我所算過的題目都想到。但是徒然,再和牠相像的一個也沒有了。我後來橫了心。很膽大地說:
「恐怕題目出錯了吧!」
然而得到的是一個更加使我窘迫的回答:
「不錯的,連我的祖父也這樣說。」
窮極智生,我居然得到了一條新路,我想三個去除剩兩個,五個去除剩三個,我可以先找三個去除剩兩個的一些數,再一個一個地拿五去除來試。這真是一條光明的路,第一個我想到「五」,這自然不對,用五去除並沒有剩的。挨了下去再就想到「八」,正好用三去除剩二,用五去除剩三。我真喜出望外:
「八!」
「還是不對,七個七個地數,只剩一個。」
這真叫我走頭無路了!那天的晚飯雖則仍是那位老闆留我們喫,但當祖父答應留在那裏的時候,使我非常難過,眼巴巴地只望他領了我回家,我真是臉上熱一陣冷一陣的,那有心腸喫飯!我想得頭都脹了,總想不出這個方法來。羞愧氣悶,因而還有些惱怒,就滿心充塞着這些滋味,沒精打采地在夜裏随着祖父回家。我的祖父對我很慈愛,但督責也很嚴,他在外面雖不曾向我說什麼,一到家裏他就教訓我了:
「讀書要用心......在別人的面前不好誇口!......『寧在人前全不會,勿在人前會不全!』小小年紀曉得些什麼?別人問到就說不知道好了。......這時他的臉上嚴肅中還帶得有幾分生氣的樣兒。他給我這樣的教訓時,我的母親,嬸母,哥哥都在旁邊的,他後來慢慢地將我的遭遇說給他們聽,我的哥哥聽他說完了題目便衝口而出地:
「二十三。」
我非常不服氣 ,
「別人告訴過你的!」
「還這樣不上進,祖父真生氣了。」
從那夜起,一直兩三天,我見到祖父就怕,我沒有一個時候不想這個題的算法,真弄得喫、玩、睡、都是惝怳的。終於還是我的哥哥把算這個題目的秘訣告訴了我,而且說,這叫「韓信點兵」。這我纔雖是十分懊喪,卻慢慢地丟開了去。
現在想起來,那次的遭遇以及祖父所給我的教訓實在是我的年齡所不應當受的。不過這樣的硬教育,對於我也有很大的功勞,我對於數學能有較濃厚的興趣,一半固然由於別人所給的積極的鼓勵;而一半也由於這種差不多是我所擔受不起的遭遇和教訓。數學本來有時會叫人頭痛的,然而經過一次頭痛,總有一次的進益。這次的遭遇,對於本問題,我自己直接雖是一無所得,但對於思索問題的途徑,確實得到了不少的啓示。在當時,有些自以為有了理解的雖也不免浮泛或錯誤,但畢竟增長了一些趣味和能力。因此我願以十二分的誠意,將這段經過敘述出來,以慰勉一部分和我有相類的遭遇的讀者。
現在我們言歸正傳。
源考
所謂「韓信點兵」,就指的是那位鹽老闆所給我的問題的算法。「韓信點兵」這個名詞雖是到了明時程大位的《算法統宗》纔見到的。但這個問題在中國數學史上卻很有些來歷 ,到了賣鹽老闆都知道,也可以當得起「婦孺皆知」的榮譽了。
這題目最早是見於《孫子算經》,《孫子算經》確實是什麼時候什麼人所作的書,現在雖然難以攷證,大約是二千多年前的作品確實是不容懷疑。在《孫子算經》上這題目原是這樣的:
「今有物不知數,三三數之,賸二;五五數之,賸三;七七數之,賸二;問物幾何?」
在原書本歸在「大衍求一術」中,到了宋時,周密的書中卻有「鬼谷算」和「隔牆算」的名目,而楊輝又稱為「剪管術」,在那時便有「秦王暗點兵」的俗名,大約韓信就是從秦王變 來的,至於「明點」「暗點」那本沒有什麼多大關係。
算法
原書(編注:即《孫子算經》)上,跟着題目便有下面的段落:
「答曰二十三。
術曰:三三數之賸二,置一百四十;五五數之賸三,置六十三;七七數之賸二,置三十;併之,得二百三十三,以二百一十減之,即得。
凡三三數之賸一,則置七十;五五數之賸一,則置二十一;七七數之賸一,則置一十五;一百六以上以一百五減之,即得。」
後一小段可以說是這類問題的基本算法,而前一小段卻是本問題的解答,用現在的式子照寫出來便是:
70 x 2 + 21 x 3 + 15 x 2 = 140 + 63 + 30 = 233照前面的說法,自然是士大夫氣很重,也可以說是講義體,一般人當然很難明白,但到了周密的書便有詩歌形式的說明,那詩道:
233 - 105 x 2 = 233 - 210 = 23.
三歲孩兒七十稀,五留廿一事尤奇,這詩雖然容易記誦,但意義不很明白,而且說的也欠周到。到了程大位,牠就改了面目:
七度上元重相會,寒食清明便可知。
三人同行七十稀,五樹梅花廿一枝,這詩流傳得非常廣,所以如賣鹽老闆之流也都知道,而我的哥哥所告訴我的秘訣就是牠。
七子團圓正华月,除百令五便得知。
是的,知道了牠,這類的題目便可以機械地算了,將三除所得的餘數去乘七十,五除所得的餘數去乘二十一,七除所得的餘數去乘十五,再把這三項乘積相加;如所得的和比一百零五小,那便是所求的答數;不然,則減去一百零五的倍數而得出比一百零五小的數來——這里所要求的只是一個最小的答數——例如三三數之賸一,五五數之賸四,七七數之賸三,那末,運算的程序便是:
70 x 1 + 21 x 4 + 15 x 3 = 7 + 84 + 5 = 199.若單只就實用或遊戲說,熟記這秘訣已很夠受用了;至於牠是從那兒來的,一般人那管得許多。但就數學的立場來說,這種知其然而不知其所以然的態度卻沒有多大的價值。並且即使熟記着這秘訣,所能應付的問題不過一百零五個,因為只能限於三三、五五、七七、三種數法;我們要默記這一百零五個答數並不是不可能;然而到得果真熟記着這一百零五個答數,那就更無意味了。
199 - 105 = 94.
算法解釋
所以我們第一要問,為什麼這樣就是對的?要說明個中的理由,我們先記起算術裏面關於倍數的兩個定理:
(一)某數的倍數的倍數,還是某數的倍數。
(二)某數的若干倍數的和,還是某數的倍數。
依了這兩個定理來檢討上面的算法,設R3表示用三除所得的餘數,R5 和 R7 相應地表示用五除和用七除所得的餘數,那末:
(一)70 是 5 和 7 的倍數,而是 3 的倍數多 1,所以用R3去乘仍是 5 和 7 的倍數,而是三的倍數多R3。
(二)21 是 7 和 3 的倍數,而是 5 的倍數多 1,所以用R5去乘仍是 7 和 3 的倍數,而是 5 的倍數多R5。
(三)15 是 3 和 5 的倍數,而是 7 的倍數多 1,所以用R7去乘仍是 3 和 5 的倍數,而是 7 的倍數多R7。
(四)所以這三項相加,就 3 說,是
70 x R3 + 21 x R5 + 15 x R7若用 3 去除,所得的餘數正是R3。就 5 說,是
= 3的倍數 + R3 + 3的倍數 + 3的倍數
= 3的倍數 + R3
70 x R3 + 21 x R5 + 15 x R7若用 5 去除,所得的餘數正是R5。就 7 說,是
= 5的倍數 + 5的倍數 + R5 + 5的倍數
= 5的倍數 + R5
70 x R3 + 21 x R5 + 15 x R7若用 7 去除,所得的餘數正是R7。
= 7的倍數 + 7的倍數 + 7的倍數 + R7
= 7的倍數 + R7
這就可以證明我們如法泡製出來的數是合題的。至於在比 105 大的時候,要減去牠的倍數,使得數小於 105,這只因為適合於題目的答數本來無窮,只得取最小的一個做代表的緣故。105 本是 3、5、7 的最小公倍數,在這最小的答數上加入牠的倍數,這是和除得的餘數無關係的。
經過這樣的證明,我們可以承認上面的算法是對了。但這還不夠;我們第二要問,那 70、21 和 15 三個數含有怎樣的性質?
70 是 5 和 7 的公倍數,而 21 是 7 和 3 的最小公倍數,15 是 3 和 5 的最小公倍數,為什麼兩個是最小公倍數而他一個卻只是公倍數呢?
這個問題並不難回答,因為 21 用 5 除,15 用 7 除都恰好剩 1,而 5 和 7 的最小公倍數 35 用 3 除卻剩的是 2,要 70 用 3 除纔剩 1。所以這個解法的要點是,要求出三個數來,每一個都是三個除數中的兩個的公倍數——最小公倍數是碰巧的——而同時是其他一個除數的倍數多一。
「求一術」
這樣,就到了第三步,我要問合於這種條件的數怎樣求法?
這里且將清時黄中憲所編《求一術通解》裏面的方法摘抄在下面,我們來認識認識中國數學書的面目,也是一件趣事。
「三位泛母俱是數根,不可析,即為定母。連乘之,得一零五為衍母。以一行三除之,得三十五為一行衍數;以二行定母五除之,得二十一為二行衍數;以三行定母七除之,得一十五為三行衍數。」
這里所謂泛母,用不到解釋,便可明白;析母就是將泛母分成質因數。至於定母便是各泛母所單獨含有的質因數的積。若是有一個質因數是兩個以上的泛母所共有的,那末只是含這個質因數的個數最多的泛母用牠;若是兩個泛母所含這質因數的個數相同,那末隨便在那一個泛母用牠都可以——注意後面的另一個例——衍母是各定母的連乘積,也就是各泛母的最小公倍數,衍數是用定母除衍母所得的商。
得了定母和衍數,就可以求乘率。所謂乘率便是乘了衍數所得的積恰等於泛母的倍數多一的數;而這個乘積稱為用數。求乘率的方法,在《求一術通解》裏面是這樣說的:
「列定母於右行,列衍數於左行(左角上預寄一數),輾轉累減,至衍數餘一為止,視左角上寄數為乘率。
「按兩數相減,必以少數為法,多數為實;其法上無寄數者,不論減若干次,減餘數上仍以一為寄數 (1);其實上無寄數者,減餘數上以所減次數為寄數 (2);其法實上俱有寄數者,視累減若干次,以法上寄數亦累加若干次於實上寄數中 (3);即得減餘數上之寄數矣。」
照這個法則我們來求所要的各乘率,為了容易明白,我將原式的中國數碼改成了亞拉伯數字:
依原書所說,是用累減法,但累減便是除,為什麼不老老實實地說除,而要說是累減呢?這個理由是因為最後衍數這一行必要保留一個餘數一 —— 所以即使除得盡也不許除盡;因此說除不如說累減來得統一。但我們這時要說明,還是用除好些。我們就用除法來檢查這個計算法。如第一式,衍數 35 左角上的 1,就是所謂預寄的一數,表示用一個衍數的意思。因為定母 3 比衍數 35 小,用 3(法)去除 35(實)得 11 剩 2;照 (1) 法上無寄數,仍以 1 為餘數 2 的寄數,所以 2 的左角上寫 1。接着以 2(法)除 3(實)得 1(商)剩 1;照 (2) 實上無寄數以所減次數(即商數)為餘數的寄數,所以 1 的右角上還是 1。再用這 1(法)去除 2(實),本來是除得盡的,但應當保留餘數 1,因此只能商 1 而剩 1。照 (3) 法實都有寄數,應當以商數 1 乘法數 1 的寄數 1 加上實數 2 的寄數 1 得 2 為餘數 1 的寄數,而牠便是乘率。
| 第一次的餘數:2 | = 35 - 3 x 11 |
| 第二次的餘數:1 | = 3 - 2 × 1 |
| = 3 - 第一次的餘數 × 1 | |
| = 3 - ( 35 - 3 x 11 ) × 1 | |
| 第三次的餘數:1 | = 2 - 1 x 1 |
| = 第一次的餘數 - 第二次的餘數 × 1 | |
| = 35 - 3 x 11 - [ 3 - ( 35 - 3 x 11 ) × 1 ] × 1 | |
| = 35 - 3 x 11 - 3 + 35 × 1 × 1 - 3 x 11 | |
| = 35 x ( 1 + 1 × 1) - 3 x ( 11 + 1 + 11 ) | |
| = 35 x 2 - 3 x 23 |
∴ (35x2) ÷ 3 = 23 餘 1
上式中紅2表示所求得的乘率,橙色1和青色1分別表示第二次的寄數和第三次的商數。你看這求法多末巧妙!(編注:原書算式部份有誤,這裏作了最基本的修正。另利用網頁的彩色字體,取代原來的粗體和符號標記,說明只相應略作調整,儘量保持原文意思。)
現在用代數的方法一般証明如下.......(編注:証明部份在這裏省略,詳情請看原著。)
有了乘率,將牠去乘衍數就得用數,上面已經證明了。所以在本例題,三、五和七的用數相應地便是七十 (35 x 2) 、二十一 (21x1) 和一十五 (15x1)。
楊輝的「剪管術」中,同樣的題目有好幾個,試取兩個照樣演算於下。
例題甲
(一)求衍數
(三)求用數,就是將相應的乘率去乘衍數,所以七、八、九的用數相應地為二百八十八(72X4),四百四十一 (63x7) 和二百八十 (56 x 5)。
(四)求本數,就是將各除數所除得的剩餘相應地乘各用數,而將這三個乘積加起 來。倘若這所得的和比七、八、九的最小公倍數五百零四大,就將五百零四的倍數減去,也就是用這最小公倍數除所得的和而求餘數。
| 因而 288 x 1 + 441 x 2 + 280 x 3 | = 288 + 882 + 840 | |
| = 2010 | ||
| 2010 ÷ 504 | = 3 餘 498 |
所以四百九十八便是本數。
例題乙
二數餘一,五數餘二,七數餘三,九數餘四,問元總數幾何?
(一)求衍數
(二)求乘率
(三)求用數
2 的 .......... 315 x 1 = 315
5 的 .......... 126 x 1 = 126
7 的 .......... 90 x 6 = 540
9 的 .......... 70 x 4 = 280
(四)求本數
| 315 x 1 + 126 x 2 + 540 x 3 + 280 x 4 | = 315 + 252 + 1620 + 1120 | |
| = 3307 | ||
| 3307 ÷ 630 | = 5 餘 157 |
所以元總數是一百五十七。
例題丙
再由《求一術通解》上取一個較複雜的例,那更可以看明白這類題的算法了 。
「今有數不知總:以五累滅之,無賸;以七百一十五累減之,賸一十;以二百四十七累減之,賸一百四十;以三百九十一累減之,賸二百四十五;以一百八十七累減之,賸一百零九。問總數若干?
「答一萬零二十。」
(一)求衍數
(二)求乘率
715 的 .......... 96577 x 18 = 1738386
247 的 .......... 215056 x 139 = 2989195
391 的 .......... 13585 x 43 = 584155
(四)求總數
1738386 x 10 + 2989195 x 140 + 584155 x 245
| = 17383860 + 418487300 + 143117974 | ||
| = 578989135 | ||
| 578989135 ÷ 5311735 | = 109 餘 10020 |
這個計算所要注意的就是「廢位」;第一行的析母 5,第二行也有,第二行已用了(粗體數字就是表示採用的意思),所以第一行可廢去。又第五行的 11 和 17,一個已用在第二行,一個已用在第四行,所以這一行也廢去。前面已經說過兩個泛母若有相同的質因數而且所含的個數相同,無論在那個泛母採用都可以的,因此上面的求衍數只是方法中的一種,在《求一術通解》裏,就附有每種採用法的表(見下),比較起來這一種實在是最簡單的了。(表中的 O 表示廢位)
由這幾個例,可以看出韓信的點兵不限於三三、五五、七七地數。在中國的舊數學上,「大衍求一術」還有不少的應用,不過在這篇短文裏卻講不到了。
到了這一步,我們可以問「 韓信點兵這類的問題在西洋數學中怎樣解決呢?」
代數解法
要回答這個問題,你先要記起代數中聯立方程式的解法來..........(編按:省略解釋聯立方程式部份)..........我們就用韓信點兵的問題來做例吧。
N = 3x + 2 = 5y + 3 = 7z + 2這有三個未知數而只有兩個方程式,但我們應當注意,x,y,z 都必須是正整數,這便是一個附帶的條件,
∴ 3x + 2 = 5v + 3 ...... (1), 3x + 2 = 7z + 2 ...... (2)
由 (1):
因為 x 和 z 是正整數,所以
雖是一個分數的形式,也必須是整數。設牠是 α,那末
因為 y 和 α 都是整數,所以
也必須是整數。設牠是 β,則
而 N = 3x + 2 = 3 (5β + 2) + 2 = 15β + 8
由 (2) 15β + 8 = 7z + 2, ∴ 7z = 15β + 6,
因為 z 和 β 都是整數,所以
也必須是整數。設牠是 β,則由 (2) 15β + 8 = 7z + 2, ∴ 7z = 15β + 6,
也必須是整數,設牠是 γ,則而
現在 γ 旣是整數,而且不能是負的,因為牠若是負的,N 也便是負的,對於題目說便沒有意義了。所以 γ 至少須是 1,而
N = 105 - 82 = 23
自然 γ 可以是 2, 3, 4, 5, 6, ......而 N 隨着便是 128, 233, 338, 443, 548 ......但 N 的值雖無窮卻有一個限制。
.......(編注:原文這裏轉談代數方程式的其它技巧,於此從略)......
將中國的老方法和現在我們所學的新法兩相比較,究竟那一種好些,這雖很難說,但由此可以知道,一個問題的解法決不只是一種。當學習數學的時候,能夠注意別人的算法以及自己另闢蹊徑去走,都是有興味而且有益處的。中國的「求一術」不但在中國數學史上佔着很重要的位置,若能發揮光大,正有不少的問題可以研究。
👉👉👉網上閱讀原書














沒有留言:
發佈留言