枚舉法,其實也是計算機編程算法裡的一種。說的是利用計算機運算速度快、精確度高的特點,對要解決問題的所有可能情況,一個不漏地進行檢驗,從中找出符合要求的答案,因此枚舉法是通過犧牲時間來換取答案的全面性。
這個方法,一般用人腦是沒有辦法完成的!可好在,《孫子算法》裡的那個「求余難題」的原題數據都是比較簡單的,所以蕭讓只稍加推算便知道了結果!——當然了,這其實也是在他在明白「中國剩餘定理」原理基礎上所採取的一種取巧方法而已。實質上,他如果不知道結果會比較簡單的話,他是不可能採取這樣的枚舉法的!而是應當認認真真,踏踏實實地用一般的方法來進行運算!只有這樣,才能在數據隨意變換的時候都能夠正確地得出答案。所謂「萬變不離其宗」,就是這麼個道理。
「哼,黃口小兒,不知死活!」
李烏光冷笑一聲,很快就沉吟著準備出題了!他這個人,相對其他高句麗人其實還算是比較謙虛的,可是那也得看是在哪方面,在「格物學」上面,他就是整個高句麗數一數二的宗師了,所以自然也有些傲氣!再加上他的兄長當初在大隋被蕭讓羞辱一回,所以他一接到淵太祚的「請柬」,馬上就二話不說地趕來「助拳」了。可是沒想到,今天的「復仇之計」出師不利,才剛一開頭呢。就被蕭讓在他最為得意的《孫子算法》上面「狠狠」地扇了一記耳光!當然了,他並不認為那是自己的失利,或者是蕭讓的學識淵博,而是認為蕭讓在這個過程中取了巧。所以現在正憋著一股勁要在蕭讓的頭上找回面子。
「有物不知其數,三個一數余一,五個一數余二,七個一數又余三,問該物總數幾何?」1
此題其實與前面《孫子算法》裡的原題是非常相近的,所不同的是,其中的餘數換了,所以總體來講變化還是不大的。這其實就是李烏光對蕭讓的蔑視了。因為他看死了蕭讓剛才之所以能得出那原題的答案來,根本就是事先知道的,可現在這麼一變化,蕭讓再想算到那答案。那就是癡心妄想了!
「是五十二……」
李烏光的話音其實才剛落,可是蕭讓提筆只在紙上小算了那麼一會,馬上就報出了答案來了!這一次,他用的可不再是枚舉的方法了!因為他明白,這樣的方法並不是什麼時候都管用的!前面一次他之所以敢用。那就是對原題有印象,知道結果會在30以內,所以才採用的枚舉法,可是現在。他根本不知道結果到底會在那個範圍之內,所以自然是要舉用一般的方法了。
「n=70xr1+21xr2+15xr3-px105
r1是1。r2是2,r3是3。結果應該就是52……」
這就是蕭讓剛才在紙上所寫下的計算過程了。這個計算過程說起來其實也簡單,那就是他用「中國剩餘定理」推算出來的,首先,那「105」其實是除數「3」、「5」、「7」的公倍數,而「70」、「21」、「15」則分別是「105」各約去模數「3」、「5」、「7」後,再分別乘以整數「2」、「1」、「1」從而得到的。
推廣到一般情形:設有一數n,分別被兩兩互素的幾個數a1、a2、……an相除得餘數r1、r2、……rn,即n≡ri(mod
ai)(i=1、2、……n),只需求出一組數k,使滿足1(mod
ai)(i=1、2、……n),那麼適合已給一次同余組的最小正數解是(p是整數,m=a1xa2x……xan),這就是現代數論中著名的「中國剩餘定理」。
它的基本形式其實是早已經包含在《孫子算經》「物不知數」題的解法之中的了。只是《孫子算經》沒有明確地表述這個一般的定理,所以能透徹掌握這其中變化的古人可以說是少之又少!即便是李烏光這個高句麗最博學的格物學天才,其實也只懂得比較小的變化而已,一旦將除數「3」、「5」、「7」進行變換,他很可能就「嗝屁」了。——當然,也不是完全解不出來,只是在時間上可能要用上四五天的時間而已。
「不……不可能,你這答案必……必定是錯的!」
李烏光聽到蕭讓的說出答案,他第一個的反應就是發愣,接著就是不相信,強烈地質疑蕭讓根本就是隨口說的一個數字用來敷衍他的,要不然,他怎麼可能會那麼快就解出來了?
他會這麼認為其實一點都不奇怪,事因就是他這個在《孫子算法》上造詣極高的高句麗「格物學」第一人,要算出這經過了變化的「物不知數」問題也是不容易的,快的話,也需要一刻鐘的時間,慢的話甚至要半個時辰,所以他是一點都不相信蕭讓在轉眼之間就算出答案了的。
「呵呵!說你是井底之蛙,你還不承認?對與不對,你可否先算上一遍再來說話?」
蕭讓自認自己是絕對沒有算錯的,所以自然不會給李烏光留一絲的面子,畢竟這李烏光是高句麗人,他們可從一開始的時候心裡就憋著壞主意了!真給他們面子,那就是跟自己過不去了!
「哼,本官要如何做,用不著你多言!」
李烏光嘴上雖然是這麼說,可他終究還是拿起了筆來,然後開始默默地算起這在他心裡認為是極為難的「物不知數」問題了!剛開始算,他的臉上雖然難看,可是還稍帶著一絲不屑的,因為他認為蕭讓剛才所說的答案肯定是錯的,可是算著算著,他的神情是越來越嚴肅了,到最後甚至一「顫」,眼裡露出儘是不信的神色!
「哼,如何?小子的答案可曾有錯?」
蕭讓看到他這副神情就知道他肯定是已經算出答案來了,所以一臉笑容地問道。可別說他太囂張,半點不懂得低調!可是這低調是當真低調不起的,而且那李烏光和在場的高句麗人都太過「咄咄逼人」了,要不是如此,蕭讓還真不打算做得那麼出格。
「哼!老夫還沒算完!」
李烏光對於蕭讓的「挑釁」,那是下意識地就作了「反擊」,可是他這「反擊」可也有個前提,那就是稍後的結果確實能如他想的那般,最後來個「翻天覆地」的轉變,也就是根本不是「52」這個答案,所以就見到他輕輕擦了擦自己頭上的汗水,深吸一口氣之後就再次開始在紙上算道了:「三三數之,取數七十,與餘數一相乘;五五數之,取數二十一,與餘數二相乘;七七數之,取數十五,與餘數三相乘。將諸乘積相加,然後減去一百零五的倍數。……」
這是《孫子算法》上有關「物不知數」問題的原文解法,不過並沒有詳述解題原理,所以只要稍有變化,學習者就得好好考究一番,看看到底哪裡應該維持原樣,哪裡又要做些變化!又經過了大概一刻鐘的時間,第二次的運算結果終於是出來了,很不幸的,仍然是那個刺眼的「五十二」,於是李烏光的臉色一下子就變得「剎白」了。
「這……這如何可能?」
他是不相信蕭讓這轉眼間工夫算出來的答案就是正確答案的,可是現在的事實是,自己兩次的計算都證實了蕭讓答案的正確性,這就讓他相當的難受了!這怎麼可能?自己一個在《孫子算法》上造詣極高的天才,居然會輸給一個年未滿二十的黃毛小兒?這讓人怎麼接受得了啊?
可接受得了,接受不了,那都與大局無關了,因為事實就是事實,除非他厚顏無恥地否認這「五十二」確實不是正確的答案,否則不管他再講些什麼話都改變不了這個事實了!——而讓他厚顏無恥地否認這個事實,他還真做不到!因為他在「格物學」上的狂熱那是出了名的,而這樣的人,通常都有著一個「通病」,那就是相當的「自負」,而且在「自負」的同時,還相當地在乎自己的名聲!這個「五十二」的正確答案他目前的確是可以否認的,而且他也相信,在場的所有人也會替他說話的,可在這之後呢?事情一旦傳出去了以後,別的「格物學」大師只要一算,孰是孰非,一切就清楚了!到那個時候,他的畢生名聲可就要毀了!這是他無論如何都接受不了的事情,所以,他不能否認!而且他也很有興趣想要知道,蕭讓到底是怎麼辦到在這麼短的時間內算出正確答案的!
*********************************************************
註釋:
1翻譯:一個數被3除余1,被5除余2,被7除余3,這個數最小是幾?(《孫子算法》裡一般問的就是最小數)(未完待續……)