- 中國代數故事(少年讀經典·第二輯)
- 許莼舫
- 2024字
- 2023-07-07 16:13:38
百雞題和中國剩余定理

在生產上和日常生活上,有時會遇到兩種東西混合的數學問題。如果已知兩種東西的總量和總價,又知每一種東西的單價,就可以求出它們各有多少數量,象《九章算術》的“善田惡田”、《孫子算經》的“雉兔同籠”和《張丘建算經》的“清酒醑酒”等都是。這些題目,每題都只有一組答案。《張丘建算經》又把上述的問題推廣,創立了三種東西混合的“百雞”題,書中列舉了三組答案。另外,在《孫子算經》里有一個“物不知數”的題目,原書雖然只舉一個答數,其實這僅是一個最小的正整數解。百雞和物不知數兩個問題,答數都是無限,而都要求正整數的解答。因此,在本篇里把它們放到一起來討論。
《張丘建算經》的百雞問題和它的三組答案是:
今有雞翁一值錢五,雞母一值錢三,雞雛三值錢一,凡百錢買雞百只,問雞翁、母、雛各幾何?答:雞翁四,母十八,雛七十八。又答:雞翁八,母十一,雛八十一。又答:雞翁十二,母四,雛八十四。
原書所舉的解法,僅有“雞翁每增四,雞母每減七,雞雛每益三,即得”共十七個字。這一段話告訴我們這三種答數間的關系是:雞翁順次增加四(就是由第一答中的四增加到第二答中的八,再由此增加到第三答中的十二),雞母順次減少七,雞雛順次增加三,但第一種答案怎樣求到,原書卻沒有交代。
在現傳《張丘建算經》里有一條注,其中舉出謝察微的一個解法,但這個解法是偶然湊巧,不適用于其它的同類問題。
宋代楊輝《續古摘奇算法》(1275年)轉載了這一個百雞題,把它稱做“三率分身”法的問題。楊輝雖然只記錄了《張丘建算經》中的部分字句,仍沒有解法,但是后面另舉兩個同類問題,卻各有合理的解法。現在把它們分別記述在下面。
第一個同類題據楊輝稱出于《辯古通源》(現已失傳)。我們如果用它的解法來解百雞題,應該先由
100×3-100=200,5×3-1=14,3×3-1=8,
算出200,14,8三個數。這實際就是設雞翁數是x,雞母數是y,雞雛數是z,依題意列方程
x+y+z=100,......................(1)
..................... (2)
用加減消元法消去z,得
14x+8y=200。(3)
這個方程里的三個數和上面算出來的完全一樣。接下去計算200÷(14+8),得商數9,余數2,這個余數不是14或8的倍數,于是我們改用小于9的整數作為商數。如果8作商數,就得余數24,這個余數正好是方程(3)中y的系數8的3倍,由此可把商數8作為所求的雞翁數。這個算法的原理是這樣的:設,代入方程(3),得
14x+8(x+u)=200.
就是 (14+8)x+8u=200
既然200÷(14+8)=8余24,那么就可得x=8,8u=24,u=3。由此繼續求得雞母數是8+3=11,雞雛數是100-8-11=81,就是前舉的第二種解答。
第二個同類題出于楊輝所見的寫本中,這個方法必須把三種物品中的某一種物品件數依次假定是1,2,3,4……,改原題為雞兔類問題,分別仿照《張丘建算經》的“清酒醑酒”問題,用“交換法”來解(楊輝稱這種算法為“雙率分身”)。直到算得其它兩種物品的件數也成整數,就得問題的解答。用這個方法來解百雞題,依次假定雞翁數是1,2,3,分別算得雞母數都不是整數。繼續假定雞翁數是4,由此算得雞母、雞雛共100-4=96只,共值錢100-5×4=80。假定96只全是雞雛,所值錢要比實際少,每換進雞母1只,所值錢應增加
,算得雞母數是
[①古法在解含有分數的問題時要用“通分”,在這個算中,所謂通分是把被除數和除數都依分母的數擴大3倍,就是(3×80-96)+(3×3-1)=18],雞雛數是
,就是前舉的第一種解答。這種算法雖然合理,但嫌迂回曲折。
此后,直到清代,才有丁取忠用“二色差分”的方法來解百雞題。二色差分也就是楊輝所稱的雙率分身,但是他不用從1起的各整數順次假定是雞翁數來計算,而是假定雞翁數是零,算得雞母、雞雛數以后再用四、七、三來增減的。我們猜想,丁取忠的這個算法可能是由下述的過程創造出來的:
《張丘建算經》所示的四、七、三既然可以用來把一組答案增減而得另一答案,那么不妨再把最后一種答案繼續增減,看它是否還有第四組答案,這樣經過增減后,得雞翁十六,雞母負三,雞雛八十七,因為雞數不應該是負數,所以這一組數是不適用的。再用四、七、三從第一組答案逆推(即增改做減,減改做增),得雞翁零,雞母二十五,雞雛七十五,其中沒有雞翁,雖然不合題意,但從此卻可以推知原書解法所以會這樣簡略的原因。丁取忠大概是假定張丘建在開始計算時把雞翁當作沒有的。如果是這樣,那么一百錢買兩種雞共一百只,就成了一個雞兔類的問題,用交換法可求得雞母二十五,雞雛七十五,再用四、七、三增減,這個問題就完全解決了。
關于四、七、三這三個數的來歷,在《張丘建算經》里也沒有提到。我們認為這也可能是照上面所講的方法推算出來的。這就是說,我們先假定沒有雞翁,用交換法求得雞母數是25,雞雛數是75;再假定沒有雞雛,用同法求得雞翁數是-100,雞母數是200,于是計算兩個結果的差額(前者比后者增或減),得雞翁增0-(-100)=100,雞母減200-25=175,雞雛增75-0=75,再以25約簡就得。
由前面所舉的方程(1)和(2)來考察,我們知道,百雞問題有三個未知數而僅能列成兩個方程,它是一個不定方程問題,不定方程的解答原來可以多到無窮,但因本題的答案限于正整數,所以僅有三種。