一、引言
百雞問題出自西元5世紀《張丘建算經》卷下最後一問(
今有雞翁一, 直錢五;雞母一, 直錢三; 雞雛三, 直錢一。 凡百錢, 買雞百隻。 問雞翁、母、雛各幾何?
在這之後的一千多年時間裡, 該題或其同類型題目不但在中算家的著作中多次出現, 而且遠播海外, 成為世界數學史上最為著名的不定方程問題之一
(
今有雞翁一隻直五文, 雞母一隻直四文, 雞兒一文得四隻。 今有錢一百文, 買雞大小一百隻。 問各幾何?
今有雞翁一隻直四文, 雞母一隻直三文, 雞兒三隻直一文。 今有錢一百文, 還買雞大小一百隻。 問各幾何?
前一題有一組解;
後一題有兩組解, 但甄鸞只給出一組, 說明他並沒有掌握百雞問題的一般解法。
而按他的說法則是將其歸入「既舍數術, 宜從心計」(
事實上, 自甄鸞始直到 19 世紀, 雖然有許多著作都討論過這個問題, 但都未能找到一般解法。至1815年, 駱騰鳳撰《藝遊錄》二卷, 於「衰分補遺」章討論此題
(
二、對「百雞術」的一種解讀
由於原始文獻的闕漏, 因此除非有新的考古發現, 對於"百雞問題"術文的任何理解都只能是一種推測, 無法以真實性來要求, 只能以合理性來評判。
在這方面, 筆者認為「吳文俊原則」為我們提供了一個重要的標準。
這就是(
原則一: 所有研究結論應該在倖存至今的原著的基礎上得出;
原則二: 所有結論應該利用古人當時的知識、輔助工具和慣用的推理方法得出。
當然, 堅持「吳文俊原則」, 並不意味著一定要排斥現代數學符號和表達式, 更可取的態度是在尊古主義
(antiquarianism) 與今釋主義 (presentism) 之間尋求一種平衡 (
就百雞問題而言, 其預設知識和求解工具應從其前存在的數學典籍中去尋找。在這方面, 《九章算術》包括劉徽注中的分數運算理論和方程理論(
以 3 「遍乘」 (2) 再「直除」 (1), 即得
$$ 14x+8y=200, \tag{3} $$這是一個標準的二元一次或線性不定方程。 後來的研究者在解百雞類問題過程中無論成功還是遭遇困難, 主要面對的就是求這樣一個線性不定方程正整數解的問題。 方程 (3) 還可以進一步簡化為
$$ 7x+4y=100, \tag{4} $$
通過「損益」和分數運算
6
6
分數運算也是《張丘建算經》的一大算法特色(
對照原百雞問題不難看出, 這兩個方程組分別是將 (2) 中的 3 變更為 4 以及 5 變更為 4 所得。
由它們導出的線性不定方程分別是 $19x+15y=300$ 和 $11x+8y=200$。
如果注意到原百雞問題第一組解中 $x$ 的值就是 (4) 中 $y$ 的係數, 便可從這兩個不定方程直接類比得出 $x=15$ 和 $x=8$ 分別是這兩個題中的雞翁數,
從而分別得到對應的解。
但這樣憑對數字的敏感
7
7
這一點從甄鸞造出這兩題的方式可窺見一斑。
阮元《疇人傳》曾評價說(
楊輝在《續古摘奇算法》(1275)卷下(
出錢一百, 買溫柑、綠橘、匾橘共一百(枚)。 只云溫柑一枚七文, 綠橘一枚三文, 匾橘三枚一文, 問各買幾何?
醇酒每㪷七貫, 行酒每㪷三貫, 醨酒三㪷值一貫。今支一十貫, 買酒十㪷, 問各幾何?
設 $x,y,z$ 分別是溫柑、 綠橘、 匾橘數或醇酒、 行酒、 醨酒量, 由這兩題可列出方程組分別為:
$$\left\{\begin{array}{l} x+y+z=100\\ 7x+3y+\dfrac 13z=100 \end{array}\right.\quad \hbox{和}\quad \left\{\begin{array}{l} x+y+z=10\\ 7x+3y+\dfrac 13z=10 \end{array}\right. \hbox{。}$$
我們先來看後一題。
據楊輝所述, 該題來自某一寫本。
楊輝記載的原始解法是先令 $y=1$, 將這個三元一次不定方程組變成一個適定的二元一次方程組, 再解得 $x=0.6$, $z=8.4$。
但這裡出現了一個問題, 原本要求正整數解, 卻得出了小數(
與前一題相同。
不過, 該題的解法卻預示了後來丁取忠和時曰醇這方面的工作(
再來看前一題。 據楊輝所述, 該題摘自《辨古通源》一書。 目前此書已失傳。令人印象深刻的是這裡記錄的解法:
這應該是目前所知關於如何從一個三元一次不定方程組導出一個線性不定方程的最早文字記載。 解題程式的後半部分也值得關注。將其串聯起來就是:
$$200=28\times 6+32=(20+8)\times 6+8\times 4=20\times 6+8\times (6+4)=20\times \fbox{6}+8\times \fbox{10}\hbox{。}$$可見, 6 和 10 兩數適合方程 $20x+8y=200$。 這並非拼湊所得, 而是有著內在的算理依據。 因為該方程可以變形為 $28x+8(y-x)=200$, 這意味著只要新方程有正整數解, 那麼原方程必然有正整數解; 而此時以 28 除 200, 嘗試置商使得餘數為 8 的倍數, 即可按上述程序求出一組解。 其實, 可以將所要求解的方程化為最簡形式 $5x+2y=50$, 然後再施行上述程序:
$$ 50=7\times 6+8=(5+2)\times 6+2\times 4=5\times 6 +2\times (6+4)=5\times \fbox{6}+2\times \fbox{10}\hbox{。}$$而原題實際上有四組解。 由 $5x+2y=50$ 得出
$$x=\frac 25 (25-y),$$依題意, 令 $25-y=5$; 10; 15; 20, 則可得四組解為:
$$\left\{\begin{array}{l} x=2\\[-5pt] y=20\\[-5pt] z=78\end{array}\right.;\quad \left\{\begin{array}{l} x=4\\[-5pt] y=15\\[-5pt] z=81\end{array}\right.;\quad \left\{\begin{array}{l} x=6\\[-5pt] y=10\\[-5pt] z=84\end{array}\right.;\quad \left\{\begin{array}{l} x=8\\[-5pt] y=5\\[-5pt] z=87\end{array}\right.\hbox{。}$$
截至目前, 我們所討論的百雞類問題涉及的線性不定方程 $ax+by=c$ ($a,b,c$ 為正整數),
除了都具有非負整數解外
10
10
可以證明,
如果 $a,b,c$ 為正整數, $(a,b)=1$, 且 $c\gt ab-a-b$, 則不定方程 $ax+by=c$ 有非負整數解 (
九文買個桃, 二文買個梨, 一文六個杏。百文買百枚。
列出不定方程組就是:
$$\left\{\begin{array}{l} x+y+z=100\\[-5pt] 9x+2y+\dfrac 1{6}z=100 \end{array}\right. \hbox{。}$$
吳敬給出的解法是先令 $z=66$, 得適定方程組 $\left\{\begin{array}{l}
x+y=34\\[-5pt]
9x+2y=89
\end{array}\right.$, 解得 $x=3$, $y=31$;
相當於沿用了楊輝《續古摘奇算法》中解 「醇酒、 行酒、 醨酒」
題的做法
11
11
吳敬此題顯然是為適合其解法所造,
然而在打破百雞類問題所列方程組的第二個方程中有兩個未知數的係數互為倒數這一傳統上, 此題並不是第一個。
在它之前, 印度和阿拉伯數學家已經造出了這樣的問題, 對此可以參看有關文獻(
因此, 我們可以區分出兩種類型的百雞問題 : 前面討論的都是第 I 型百雞問題; 現在的這個題目則屬於第 II 型百雞問題。 對於此題我們可以給出下面的求解程式:
\begin{align*} x=\,&\frac 1{53}(500-11y)=\frac 1{53}(11\times 45-11y+5)=\frac 1{53}(11\times (31+14)-11y+5)\\ =\,&\frac 1{53}(11\times 31-11y+11\times 14+5)=\frac 1{53}(11\times 31-11y+159)=\frac {11}{53}(31-y)+3. \end{align*}依題意, 要求正整數解, $31-y$ 的值只能是 0, 於是得一組解 $\left\{\begin{array}{l} x=3\\[-5pt] y=31\\[-5pt] z=66\end{array}\right.$。 這裡的求解步驟是 500 和 11 先做帶餘除法, 而求解的關鍵在於將商 45 分出一部分, 使得它與 11 的乘積加上餘數 5 是 53 的倍數。
一般地, 我們有下面的定理(為了討論方便起見, 這裡我們將正整數解的要求放寬為非負整數解, 並且不失一般性, 只針對 $y$ 的係數分情況討論):
定理: 設 $a,b,c$ 為正整數, 如果
\begin{align*} ax+by=c\tag{*} \end{align*}有非負整數解, 並且 $c=bq+r$ $(0\le r\lt b)$, 則存在非負整數 $0\le q_0\le q$, 使得 (*) 的非負整數解可以表示成
$$\left\{\begin{array}{l} x=\dfrac{bq_0+r}{a}+bt\\[-5pt] y=q-q_0-at \end{array}\right., \qquad \Big(0\le t\le \Big[\frac{q-q_0}a\Big]\Big)\hbox{。}$$證明: 假設 $(x_0,y_0)$ 是 (*) 的一組非負整數解, 則有
$$ax_0+by_0=c=bq+r\lt bq+b=b(q+1)\hbox{。}$$因 $ax_0\ge 0$, 故有 $by_0\lt b(q+1)$, 從而有 $y_0\lt q+1$, 或 $y_0\le q$。
另由已知條件及 (*) 得
$$x=\frac 1a(c-by)=\frac 1a(bq-by+r)\hbox{。}$$(I) 若 $r=0$, 取 $q_0=0$, 則由 $x=\frac ba(q-y)$, 令 $q-y=at$, 可得 (*) 的非負整數解為
$$\left\{\begin{array}{l} x=bt\\[-5pt] y=q-at \end{array}\right., \qquad \Big(0\le t\le \Big[\frac{q}a\Big]\Big);$$(II) 若 $0\lt r\lt b$, 取 $q_0=q-y_0$, 因 $0\le y_0\le q$, 故有 $0\le q_0\le q$。 在此情形, 有
$$x=\frac 1a(bq-by+r)=\frac 1a(b(y_0+q_0)-by+r)=\frac ba(y_0-y)+\frac{bq_0+r}{a},$$上式是由 (*) 變形而來, 因此對 $x=x_0$, $y=y_0$ 恒成立, 代入得 $\dfrac{bq_0+r}{a}=x_0$, 也為非負整數。 於是令 $y_0-y=at$, 並注意到此時 $y_0=q-q_0$, 可得 (*) 的非負整數解為
$$\left\{\begin{array}{l} x=\dfrac{bq_0+r}{a}+bt\\ y=q-q_0-at \end{array}\right., \qquad \Big(0\le t\le \Big[\frac{q-q_0}a\Big]\Big)\hbox{。}{\Box} $$顯然, $r=0$ 相應於第 I 型百雞問題; $0\lt r\lt b$ 則相應於第 II 型百雞問題。 對於第 I 型百雞問題, 證明過程(I) 是構造性的, 即它也提供了求解第 I 型百雞問題的具體步驟 12 12 容易看出, 第 I 型百雞問題總有相應於 $x=0$ 的一組非負整數解。 這也解釋了為什麼丁取忠和時曰醇等人能先假設雞翁數為 0, 將其轉化為"二色差分"問題來求解第 I 型百雞問題; 而在求解第 II 型百雞問題時會遇到"以法除實不盡"的情況。 。對於第 II 型百雞問題, 證明過程 (II) 則是存在性的, 用此程式求解第 II 型百雞問題的關鍵是找到 $q_0$, 但證明本身並沒有提供尋找的方法。 不過當數據不很大時, 我們可以通過試算找到, 即嘗試取 $n=1, 2,\ldots$, 使得 $bq_0+r=na$ 成立, 從而求出 $q_0$。 由於 $na=bq_0+r\le bq+r=c$, 因此只需對於滿足 $1\le n\le \Big[\dfrac ca\Big]$ 的 $n$ 進行試算就可以了。 例如, 對於前述吳敬給出的題目, 我們有 $1\le n\le\Big[\dfrac{500}{53}\Big]=9$, 通過試算到 $n=3$ 即可求出 $q_0=14$。
需要指出的是, 百雞類問題所列方程組的第二個方程中, 有兩個未知數的係數互為倒數這一特徵並不能作為區分第 I 型和第 II
型百雞問題的依據。
例如, 據約西元 9 世紀時的《巴克沙利手稿》中的一個題目所建立的不定方程組為 (
但導出的線性不定方程是 $5x+2y=20$, 屬於第 I 型百雞問題。 於是由 $x=\dfrac 25(10-y)$, 令 $10-y=5$, 容易求得其唯一的一組正整數解為 $\left\{\begin{array}{l} x=2\\[-5pt] y=5\\[-5pt] z=13 \end{array}\right.$。
三、一個與之有關的問題
在「張邱建算經提要」(
今有五家共井, 甲二綆不足, 如乙一綆; 乙三綆不足, 如丙一綆; 丙四綆不足, 如丁一綆; 丁五綆不足, 如戊一綆; 戊六綆不足, 如甲一綆。 如各得所不足一綆, 皆逮。 問井深、綆長各幾何?
的確, 在他更早
13
13
發表於 1921 年。
的一篇文章「百雞術源流考」
值得注意的是, 已有學者對於將五家共井問題納入不定方程問題提出了異議。
李文林和袁向東(
在將五家共井問題歸為不定方程問題時,大多數作者給出的依據是由該題列出的方程組為 16 16 原著並沒有給出所列方程組,術文也很簡單: 如方程。 以正負術入之。 $$\left\{\begin{array}{l} 2x+y=w\\ 3y+z=w\\ 4z+u=w\\ 5u+v=w\\ 6v+x=w, \end{array}\right.$$ 其中 $x,y,z,u,v,w$ 分別是甲、 乙、 丙、 丁、 戊的繩長和井深, 從而有 5 個方程、 6 個未知數, 即未知數的個數多於方程的個數。 然而, 我們下面會看到, 即使設 5 個未知數, 列 5 個方程, 仍可以求解該題。
未知數所設如前, 據題意有
17
17
我們注意到, 西元 9 世紀時印度摩訶毗羅所著《綱要》,
以及《巴克沙利手稿》中關於寶石的題目 (
是為齊次線性方程組。 對係數矩陣作初等行變換, 有
從而有 $x:y:z:u:v=265:191:148:129:76$, 井深隨之可以確定。
根據以上討論, 筆者認為, 與其稱五家共井問題為中國數學史上最早出現的不定方程問題, 不如說它是世界數學史上最早出現的齊次線性方程組求解問題。 而正如錢寶琮所言, 百雞問題則是中國數學史上最早出現的不定方程問題。
四、結語
百雞問題無疑是東西方數學交流史上最有影響、也最具有說服力的一個例證。 回顧百雞問題自提出至清末學者利用「求一術」或「二色差分法」對「百雞術」做出解讀的歷史, 我們可以看出, 要想給出百雞類問題的完整解答, 最終都要歸結為求一個線性不定方程 $ax+by=c$ (這裡 $a,b,c$ 為正整數) 的正整數 (或非負整數) 解的問題。 在本文中, 筆者據此區分了兩種類型的百雞問題: I. $a$ 和 $b$ 中至少有一個能整除 $c$; II. $a$ 和 $b$ 都不能整除 $c$, 並嘗試利用歷史上百雞問題提出前已經構建起來的數學知識, 對百雞類問題給出一種統一的求解程序, 對「百雞術」做出一種新的解讀, 以期為百雞問題的歷史研究增添一個新的視角。
致謝: 作者感謝審稿人對本文提出寶貴的修改意見。
參考文獻
本文作者任教中國北京化工大學數理學院