十九、韓信點兵
昨天馬先生結束了四則問題以後,叫我們複習關於質數、最大公約數和最小公倍數的問題。晚風習習,我取了一本《開明算術教本》上冊,閱讀關於這些事項的第七章。從前學習它的時候,是否感到困難,印象已模糊了。現在要說“一點兒困難沒有”,我不敢這樣自信。不過,像從前遇見四則問題那樣摸不著頭腦,確實沒有。也許其中的難點,我不曾發覺吧!懷著這樣的心情,今天,到課堂去聽馬先生的講演。
“我叫你們複習的,都複習過了嗎?”馬先生一走上講台就問。
“複習過了!”兩三個人齊聲回答。
“那麽,有什麽問題?”
每個人都是瞪大雙眼,望著馬先生,沒有一個問題提出來。馬先生在這靜默中,看了全體一遍:“學算學的人,大半在這一部分不會感到什麽困難的,你們大概也不會有什麽問題了。”
我不曾發覺什麽困難,照這樣說,自然是由於這部分問題比較容易的緣故。心裏這麽一想,就期待著馬先生的下文。
“既然大家都沒有問題,我且提出一個來問你們:這部分問題,我們也用畫圖來處理它嗎?”
“那似乎可以不必了!”周學敏回答。
“似乎?可以就可以,不必就不必,何必‘似乎’!”馬先生笑著說。
“不必!”周學敏斬釘截鐵地說。
“問題不在‘必’和‘不必’。既然有了這樣一種法門,正可拿它來試試,看變得出什麽花招來,不是也很有趣嗎?”說完,馬先生停了一停,再問,“這一部分所處理的材料是些什麽?”
當然,這是誰也答得上來的,大家搶著說:“找質數。”
“分質因數。”
“求最大公約數和最小公倍數。”
“歸根結底,不過是判定質數和計算倍數與約數——這隻是一種關係的兩麵。12是6、4、3、2的倍數,反過來看,6、4、3、2便是12的約數了。”馬先生這樣結束了大家的話,而掉轉話頭:“閑言少敘,言歸正傳。你們將橫線每一大段當1表示倍數,縱線每一小段當1表示數目,畫表示2的倍數和3的倍數的兩條線。”
這隻是“定倍數”的問題,已沒有一個人不會畫了。馬先生在黑板上也畫了一個——圖75。
圖75
“從這圖上,可以看出些什麽來?”馬先生問。
“2的倍數是2、4、6、8、10、12。”我答。
“3的倍數是3、6、9、12、15、18。”周學敏說。
“還有呢?”
“5、7、11、13、17都是質數。”王有道答道。
“怎麽看出來的?”
這幾個數都是質數,我本是知道的,但從圖上怎麽看出來的,我卻茫然了。馬先生這麽一追問,真是“實獲我心”了。
“OA和OB兩條線都沒有經過它們,所以它們既不是2的倍數,也不是3的倍數……”說到這裏,王有道突然停住了。
“怎樣?”馬先生問道。
“它們總是質數呀!”王有道很不自然地說。這一來大家都已發現,這裏麵一定有了漏洞,王有道大概已明白了。不期然而然地,大家一齊笑了起來。笑,我也是跟著笑的,不過我並未發現這漏洞。
“這沒有什麽可笑的。”馬先生很鄭重地說,“王有道,你回答的時候也有點兒遲疑了,為什麽呢?”
“由圖上看來,它們都不是2和3的倍數,而且我知道它們都是質數,所以我那樣說。但突然想到,25既不是2和3的倍數,也不是質數,便疑惑起來了。”王有道這麽一解釋,我才恍然大悟,漏洞原來在這裏。
馬先生露出很滿意的神氣,接著說:“其實這個判定法,本是對的,不過欠精密一點兒,你是上了圖的當。假如圖還可以畫得詳細些,你就不會這樣說了。”
馬先生叫我們另畫一個較詳細的圖——圖76——將表示2、3、5、7、11、13、17、19、23、29、31、37、41、43、47 各倍數的線都畫出來。(這裏的圖,右邊截去了一部分。)不用說,這些數都是質數。由圖上,50以內的合數當然可以很清楚地看出來。不過,我有點兒懷疑。——馬先生原來是要我們從圖上找質數,既然把表示質數的倍數的線都畫了出來,還用得找什麽質數呢?
圖76
馬先生還叫我們畫一條表示6的倍數的線,OP。他說:“由這張圖看,當然再不會說,不是2和3的倍數的,便是質數了。你們再用表示6的倍數的一條線OP作標準,仔細看一看。”
經過十多分鍾的觀察,我發現了:“質數都比6的倍數少1。”
“不錯。”馬先生說,“但是應得補充一句——除了2和3。”這確實是我不曾注意到的。
“為什麽5以上的質數都比6的倍數少1呢?”周學敏提出了這樣一個問題。
馬先生叫我們回答,但沒有人答得上來,他說:“這隻是事實問題,不是為什麽的問題。換句話說,便是整數的性質本來如此,沒有原因。”對於這個解釋,大家好像都有點兒莫名其妙,沒有一個人說話。馬先生接著說:“一點兒也不稀罕!你們想一想,隨便一個數,用6去除,結果怎樣呢?”
“有的除得盡,有的除不盡。”周學敏說。
“除得盡的就是6的倍數,當然不是質數。除不盡的呢?”
沒有人回答,我也想得到有的是質數,如23;有的不是質數,如25。馬先生見沒有人回答,便這樣說:“你們想想看,一個數用6去除,若除不盡,它的餘數是什麽?”
“1,例如7。”周學敏說。
“5,例如17。”另一個同學說。
“2,例如14。”又是一個同學。
“4,例如10。”其他兩個同學同時說。
“3,例如21。”我也想到了。
“沒有了。”王有道來一個結束。
“很好!”馬先生說,“用6除剩2的數,有什麽數可把它除盡嗎?”
“2。”我想它用6除剩2,當然是個偶數,可用2除得盡。
“那麽,除了剩4的呢?”
“一樣!”我高興地說。
“除了剩3的呢?”
“3!”周學敏快速地說。
“用6除了剩1或5的呢?”
這我也明白了。5以上的質數既然不能用2和3除得盡,當然也不能用6除得盡。用6去除不是剩1便是剩5,都和6的倍數差1。
不過馬先生又另外提出一個問題:“5以上的質數都比6的倍數差1,掉轉頭來,可不可以這樣說呢?——比6的倍數差1的都是質數?”
“不!”王有道說,“例如25是6的4倍多1,35是6的6倍少1,都不是質數。”
“這就對了!”馬先生說,“所以你剛才用不是2和3的倍數來判定一個數是質數,是不精密的。”
“馬先生!”我的疑問始終不能解釋,趁他沒有說下去,我便問:“由作圖的方法,怎樣可以判定一個數是不是質數呢?”
“剛才畫的線都是表示質數的倍數的,你們會想到,這不能用來判定質數。但是如果從畫圖的過程看,就可明白了。首先畫的是表示2的倍數的線OA,由它,你們可以看出哪些數不是質數?”
“4、6、8……一切偶數。”我答道。
“接著畫表示3的倍數的線OB呢?”
“6、9、12……”一個同學說。
“4既然不是質數,上麵一個是5,第三就畫表示5的倍數的線OC。”這一來又得出它的倍數10、15……再依次上去,6已是合數,所以隻好畫表示7的倍數的線OD。接著,8、9、10都是合數,隻好畫表示11的倍數的線OE。照這樣做下去,把合數漸漸地淘汰了,所畫的線所表示的不全都是質數的倍數嗎?——這個圖,我們無妨叫它質數圖。”
“我還是不明白,用這張質數圖,怎樣判定一個數是否是質數。”我跟著發問。
“這真叫作百尺竿頭,隻差一步了!”馬先生很誠懇地說,“你試舉一個合數與一個質數出來。”
“15與 37。”
“從15橫看過去,有些什麽數的倍數?”
“3的和5的。”
“從37橫著看過去呢?”
“沒有!”我已懂得了。在質數圖上,由一個數橫看過去,若有別的數的倍數,它自然是合數;一個也沒有的時候,它就是質數。不隻這樣,例如15,還可知道它的質因數是3和5。最簡單的,6含的質因數是2和3。馬先生還說,用這個質數圖把一個合數分成質因數,也是容易的。這法則是這樣:
例一:將35分成質因數的積。
由35橫看到D得它的質因數,有一個是7,往下看是5,它已是質數,所以
35=7×5
本來,若是這圖的右邊沒有截去,7和5都可由圖上直接看岀來的。
例二:將12分成質因數的積。
由12橫看得Q,表示3的4倍。4還是合數,由4橫看得R,表示2的2倍,2已是質數,所以
12=3×2×2=3×22
關於質數圖的作法,以及用它來判定一個數是否是質數,用它來將一個合數拆成質因數的積,我們都已明白了。馬先生提出求最大公約數的問題。前麵說過的既然已明了,這自然是迎刃而解的了。
例三:求12、18和24的最大公約數。
圖77
從質數圖上,如圖77,我們可以看出24、18和12都有約數2、3和6。它們都是24、18、12的公約數,而6就是所求的最大公約數。
“假如不用質數圖,怎樣由畫圖法找出這三個數的最大公約數呢?”馬先生問王有道。他一邊思索,一邊用手指在桌上畫來畫去,後來他這樣回答:“把最小一個數以下的質數找出來,再畫出表示這些質數的倍數的線。由這些線上,就可看出各數所含的公共質因數。它們的乘積,就是所求的最大公約數。”
例四:求6、10和15的最小公倍數。
依照前麵各題的解法,本題是再容易不過了。OA、OB、OC相應地表示6、10、15的倍數。A、B和C同在30的一條橫線上,30便是所求的最小公倍數。
圖78
例五:某數,三個三個地數,剩一個;五個五個地數,剩兩個;七個七個地數,也剩一個,求某數。
馬先生寫好了這個題,叫我們討論畫圖的方法。自然,這不是很難,經過一番討論,我們就畫出圖79來。1A、2B、1C各線分別表示3的倍數多1,5的倍數多2,7的倍數多1。而這三條線都經過22的線上,22即是所求的。——馬先生說,這是最小的一個,加上3、5、7的公倍數,都合題。——不是嗎?22正是3的7倍多1,5的4倍多2,7的3倍多1。
圖79
“你們由畫圖的方法,總算把答案求出來了,但是算法是什麽呢?”馬先生這一問,卻把我們難住了。先是有人說是求它們的最小公倍數,這當然不對,3、5、7的最小公倍數是105呀!後來又有人說,從它們的最小公倍數中減去3,除所餘的1。也有人說減去5,除所餘的2,自然都不是。從圖上仔細看去,也毫無結果。最終隻好去求教馬先生了。他見大家都束手無策,便開口道:“這本來是咱們中國的一個老題目,它還有一個別致的名稱——韓信點兵。它的算法,有詩一首:三人同行七十稀,五樹梅花廿一枝,七子團圓月正半,除百零五便得知。你們懂得這詩的意思嗎?”
“不懂!不懂!”許多人都說。
於是馬先生加以解釋:“這也和‘無邊落木蕭蕭下’的謎一樣。三人同行七十稀,是說3除所得的餘數用70去乘它。五樹梅花廿一枝,是說5除所得的餘數,用21去乘。七子團圓月正半,是說7除所得的餘數用15去乘。除百零五便得知,是說把上麵所得的三個數相加,加得的和若大於105,便把105的倍數減去。因此得出來的,就是最小的一個數。好!你們依照這個方法將本題計算一下。”
下麵就是計算的式子:
奇怪!對是對了,但為什麽呢?周學敏還找了一個題“三三數剩二,五五剩三,七七數剩四”來試:
53正是3的17倍多2,5的10倍多3,7的7倍多4。真奇怪!但是為什麽?對於這個疑問,馬先生說,把上麵的式子改成下麵的形式就明白了。
“這三個式子,可以說是同一個數的三種解釋:(1)表明它是3的倍數多2;(2)表明它是5的倍數多3;(3)表明它是7的倍數多4。這不是正和題目所給的條件相合嗎?”馬先生說完了,王有道似乎已經懂得,但又有點兒懷疑的樣子。他躊躇了一陣,向馬先生提出這麽一個問題:“用70去乘3除所得的餘數,是因為70是5和7的公倍數,又是3的倍數多1。用21去乘5除所得的餘數,是因為21是3和7的公倍數,又是5的倍數多1。用15去乘7除所得的餘數,是因為15是5和3的公倍數,又是7的倍數多1。這些我都明白了。但,這70,21和15怎麽找出來的呢?”
“這個問題,提得很合適!”馬先生說,“這類題的要點,就在這裏。但,這些數的求法,說來話長,你們可以去看開明書店出版的《數學趣味》,裏麵就有一篇專講《韓信點兵》的。——不過,像本題,三個除數都很簡單,70、21、15都容易推出來。5和7的最小公倍數是什麽?”
“35。”一個同學回答。
“3除35,剩多少?”
“2——”另一個同學說道。
“注意!我們所要的是5和7的公倍數,同時又是3的倍數多1的一個數。35當然不是,將2去乘它,得70,既是5和7的公倍數,又是3的倍數多1。至於21和15,情形也相同。不過21已是3和7的公倍數,又是5的倍數多1;15已是5和3的公倍數,又是7的倍數多1,所以用不到再把什麽數都去乘它了。”
最後,他還補充一句:“我提出這個題的原意,是要你們知道,它的形式雖和求最小公倍數的題相同,實質上卻是兩回事,必須要加以注意。”