41206 沈括《夢溪筆談》中計數成就探析

終極密碼

遊戲規則:本遊戲為猜密碼的遊戲。密碼為0到100之間的其中1個整數,電腦會提示密碼的所在範圍,玩家必須在6次之內猜到密碼才能過關。
★ 終極密碼為0到100之間 ★
您共有六次機會

摘要: 沈括 (1031$\sim$1095) 在他的《夢溪筆談》中提出了「隙積術」, 開創中算垛積術之先河, 推進了級數論的研究; 在「棋局都數」中他提出三種方法判斷圍棋不同棋局總數 $3^{361}$ 的位數。 本文從計數論的角度論述這兩個名題, 分析沈括的方法, 指出這些成就在計數論中的意義。

關鍵字: 沈括, 《夢溪筆談》, 隙積術, 棋局都數, 計數論。

引言

沈括是中國文化史、科學史上的巨人。 《宋史·沈括傳》稱「括博學善文, 于天文、方志、律曆、音樂、醫藥、蔔算, 無所不通, 皆有所論著。 又紀平日與賓客言者為《筆談》, 多載朝廷故實、耆舊出處, 傳於世」。 沈括既是一位朝廷命官, 同時又是一位學者。他一生勤奮好學, 博古通今, 著作有 40 種之多, 其中有經類 8 種、 史類 11 種、 子類 18 種、 集類 3 種, 涉及易、 禮、 樂、 春秋、 儀注、 刑法、 地理、 儒家、 農家、 小說家、 曆算、 兵書、 雜藝、 醫書、 別集、 總集、 文史等 17 類。

《宋史·藝文志》 著錄沈括的著作共有22種:《樂論》、 《樂器圖》、 《三樂譜》、 《樂律》、 《春秋機括》、 《熙甯詳定諸色人廚料式》、 《熙甯新修凡女道士給賜式》、 《諸救式》、 《諸救令格式》、 《諸救格式》、 《天下郡縣圖》、 《忘懷錄》、 《筆談》、 《清夜錄》、 《熙寧奉元曆》、 《熙寧奉元歷經》、 《熙寧奉元曆立成》、 《熙寧奉元曆備草》、 《比較交蝕》、 《良方》、 《蘇沈良方》、 《集賢院詩》。

《夢溪筆談》 (包括《補筆談》、 《續筆談》, 下同) 具體分為故事、 辯證、 樂律、 象數、 人事、 官政、 權智、 藝文、 書畫、 技藝、 器用、 神奇、 異事、 謬誤、 譏謔、 雜誌、 藥議等節。 科學史家胡道靜 (1913$\sim$2003) 先生是研究《夢溪筆談》的國際知名學者, 他把該書條目分為 609 條, 認為屬社會科學和掌故、 見聞的 420 條, 屬自然科學的 189 條。 自然科學的內容約占全書三分之一。 因此, 《夢溪筆談》既是一部自然科學著作, 也是一部人文科學著作。

《夢溪筆談》對科學多有貢獻, 他的發現和認識成為中國科學史上的早期記錄, 例如: 天文測量方面簡化、 改革渾儀、 浮漏和用表測影的方法, 記載在《渾儀議》、 《浮漏議》和《景表議》等三文中, 晚年提出用「十二氣曆」代替陰陽合曆; 地學方面發現地磁偏角; 據太行山有螺蚌殼和卵形礫石的帶狀分佈, 推斷出此系遠古海濱; 指出華北由黃河等攜帶泥沙形成的沉積平原; 據浙東雁蕩山諸峰地貌, 指出此系水蝕之結果; 沈括認識到石化的竹筍、 松樹、 魚蟹等系古生物遺跡; 化學方面記錄「膽水煉銅」: 即用鐵置換出銅的生產過程; 定義「石油」並預言這種液體的性質和用途; 等等, 不勝枚舉

宋代科學技術的發展達到中國古代歷史上的一個高峰, 而沈括是這個時代最為傑出的科學家。 我國著名科學家竺可禎 (1890$\sim$1974) 先生高度評價沈括的科學精神: 「在括當時能獨違眾議, 毅然倡立新說, 置怪怨攻罵於不顧, 其篤信真理之精神, 雖較之於伽利略, 亦不多讓也。」 錢寶琮 (1892$\sim$1974) 先生稱沈括為「偉大的科學家」。 沈括在諸多領域均有建樹, 被英國李約瑟稱作「中國整部科學史中最卓越的人物」, 並稱他的 《夢溪筆談》為「中國科學史的里程碑」。 美國科學史家席文 (Natham Sivin, 1931$\sim $) 則稱沈括是「中國科學與工程史上最多才多藝的人物之一」。 上世紀初, 日本數學家三上義夫 (1875$\sim$1950) 認為: 「沈括這樣的人物, 在全世界數學史上找不到, 唯有中國出了這樣一個。 我把沈括稱做中國數學家的模範人物或理想人物, 是很恰當的。」

本文選擇《夢溪筆談》的部分內容做分析, 指出沈括對「隙積術」和「棋局都數」等的研究都十分深刻, 屬於重要計數成果。 他是中算家級數論的創始者。 另外, 沈括對「甲子納音」的研究, 頗具特色, 在構造中使用了計數 (enumeration or counting) 方法, 將另文討論。

圖1:沈括畫像

1. 沈括是科學史上的偉人

1.1. 沈括的生平

沈括 (1031$\sim$1095), 字存中, 號夢溪丈人, 浙江錢塘 (今杭州市) 人。 北宋傑出的政治家、 科學家。 父沈周在簡州 (今四川簡陽)、 潤州 (今江蘇鎮江) 和福建泉州等地做官。 沈括從小接受儒學教育, 幼年隨父南遷, 到父任所各地和京城開封, 見識廣博, 眼界開闊。 十四、 五歲時住金陵 (今南京市), 研究醫藥, 宋仁宗皇祐二年 (1050) 著《蘇沈良方》二卷。 沈周翌年去世。 六年, 以父蔭任海州沭陽縣主簿。

宋仁宗嘉祐六年 (1061), 任安徽甯國縣令, 撰《圩田五說》、 《萬春圩圖記》。 八年, 考中進士, 任揚州司理參軍, 掌刑訟審訊。宋英宗治平二年 (1065) 薦入京師昭文館, 校編典籍, 治天文曆算。

宋神宗熙寧二年 (1069), 協助王安石變法, 任三司使, 管理全國財政。 參與刪定三司條件。 四年, 任太子中允, 檢正中書刑房公事。 五年, 兼提舉司天監, 觀測天象, 推算曆書。 「遷提舉司天監, 日官皆市井庸販法象圖器, 大抵漫不知。 括始置渾儀、景表、五壺浮漏, 後皆施用。」 (《宋史$-$沈括傳》) 薦舉淮南盲人衛朴編制《奉元曆》。 六年, 任集賢院校理。多次出使, 赴兩浙考察農田、水利、差役。 撰《渾儀議》、《浮漏議》、《景表議》、《修城法式條約》、《營陣法》。 七年, 主管軍器監, 詳定《九軍陣法》。 八年, 以翰林侍讀學士出使遼國, 交涉劃界, 獲成而還。 繪遼國地圖《使虜圖抄》。九年, 任權三司使, 整頓陝西鹽政。 力主減免下戶役錢, 變法失敗受牽連, 罷官。十年, 任宣州知州 (今安徽宣城)。

宋神宗元豐二年 (1079), 禦史李定、 何正臣等上表彈劾蘇軾, 即烏台詩案。 沈括曾指責蘇軾。 三年, 知延州 (今陝西延安), 兼鄜延路經略安撫使。 率軍與西夏軍作戰, 收復失地。 五年, 升龍圖閣直學士。 因首議築永樂城 (今陝西米脂縣西), 宋軍戰敗, 損兵二萬, 連帶擔責, 被貶隨州1 1 一說, 被貶均州(今湖北省均縣)。見百度沈括傳。(今湖北隨縣) 團練副使。 八年, 改置秀州 (今浙江嘉興)。 宋哲宗元祐二年 (1087), 繪成《守令圖》 (天下郡縣圖), 獲准到汴京進呈。 三年, 《良方》定稿。 四年, 敘以光祿少卿分司南京銜, 獲允自由遷居。 自五年始, 移家潤州 (今江蘇鎮江市東), 隱居「夢溪園」, 《夢溪筆談》定稿, 撰成《補筆談》、 《續筆談》、 《夢溪忘懷錄》及《長興集》等。 宋哲宗紹聖二年 (1095) 去世, 享年六十四歲。

1.2. 從「夢溪筆談序」看作者的著作思想

「夢溪筆談序 --- 沈括存中述   予退處林下, 深居絕過從, 思平日與客言者, 時紀一事於筆, 則若有所晤言, 蕭然移日。 所與談者, 唯筆硯而已, 謂之《筆談》。聖謨國政及事近宮省, 皆不敢私紀; 至於系當日士大夫毀譽者, 雖善亦不欲書, 非止不言人惡而已。 所錄唯山間木蔭, 率意談噱, 不系人之利害者, 下至閭巷之言, 靡所不有。 亦有得于傳聞者, 其間不能無缺謬。 以之為言則甚卑, 以予為無意於言可也。」

圖2: 沈括塑像

《夢溪筆談》序言字數並不多, 闡明作者隱居夢溪的寫作原則和態度。 這需要瞭解當時變法的時代背景。 熙甯初年, 宋神宗重用王安石任宰相, 推行機構、 賦稅、 軍隊、 科舉等制度改革, 興修水利。 各項新法觸犯了皇室、 官員、 豪強等的利益, 受到阻撓和反對。 後來宋神宗態度動搖, 熙寧七年 (1074)、 九年王安石兩次去職。 神宗去世, 年僅 10 歲的哲宗繼位, 高太后垂簾聽政, 以司馬光任宰相, 元祐年間 (1086$\sim$1093) 廢除新法, 史稱「元祐更化」。

從沈括履歷來看, 在政治上和軍事上至少受到過兩次重大挫折 : 首先, 王安石變法受到保守勢力的強烈反對, 作為被重用的沈括, 雖然業績卓然, 但由於反對力量強大, 熙寧末年他被貶宣州。 烏台詩案是雙方交惡的結果, 形成文字獄, 雙方都心懷警戒; 在互相攻訐之中都受到嚴重傷害。 其次, 元豐五年 (1082) 永樂城敗績, 此役沈括雖非首責, 但他參與督軍, 加以救援不力, 戰敗形勢嚴重不利。 這次以待罪之身被貶, 形同流放, 不得自由遷徙。 由此可知, 沈括在序言中說: 「聖謨國政及事近宮省, 皆不敢私紀; 至於系當日士大夫毀譽者, 雖善亦不欲書, 非止不言人惡而已。」 為什麼採取這樣的態度, 就完全可以理解了, 這是當時的政治環境所造成的, 也是文字獄的惡果。 對為政者的是非、 善惡、 毀譽皆無所縈懷, 或不值一提, 也與他本人的地位和心理狀況相符。 在這種背景下, 把注意力轉向自然、社會, 「所錄唯山間木蔭, 率意談噱, 不系人之利害者, 下至閭巷之言, 靡所不有」, 撰成十一世紀科學與社會學的傑作。 所以從某種意義上可以說, 《夢溪筆談》是在「元祐更化」背景下產生的。 沈括在序言中所表明的莫談國是、 一心鑽研自然科學的政治態度為後世隱者效法, 不介入政事, 只希望在揭示自然現象方面貢獻個人的才智和觀察力。

1.3. 紀念沈括對科學的傑出貢獻

沈括晚年居住在今鎮江市區夢溪園, 約 10 畝, 一條溪水流經園內, 原有多種建築。 1985 年部分恢復, 佔地 2 畝, 前幢建築門上方嵌有茅以升題寫的「夢溪園」大理石橫額; 後幢廳房內有沈括雕像和文字圖片、 模型、 實物, 展現出沈括在天文、 地理、 數學、 化學、 物理、 生物、 地質、 醫學等方面的科研成就。 沈括墓在杭州市良渚鎮安溪下溪灣自然村北的太平塢, 已得到很好的保護。 1979 年 7 月 1 日為了紀念沈括, 中國科學院紫金山天文臺將該臺在 1964 年 11 月 9 日發現的一顆小行星 2027 號命名為「沈括星」。

2. 沈括「隙積術」首開中算垛積術

2.1. 《夢溪筆談》卷十八技藝「隙積術」原文

「算術求積尺之法, 如芻萌、 芻童、 方池、 冥穀、 塹堵、 鱉臑、 圓錐、 陽馬之類, 物形備矣, 獨未有隙積一術。 古法, 凡算方積之物, 有立方, 謂六幕 2 2 校點本未指出「幕」字為「冪」(平面面積)之誤。 (冪) 皆方者, 其法再自乘則得之。 $\cdots$ 有芻童, 謂如複斗者, 四面皆殺, 其法: 倍上長加入下長, 以上廣乘之, 倍下長加入上長, 以下廣乘之, 並二位法, 以高乘之, 六而二 3 3 校點本未指出「六而二」為「六而一」(用六去除)之誤。 (一)。

隙積者, 謂積之有隙者, 如累棋、層壇, 及酒家積罌之類, 雖以 (似) 複鬥, 四面皆殺, 緣有刻缺及虛隙之處, 用芻童法求之, 常失於數少。 予思而得之, 用芻童法為上行, 下行別列:下廣以上廣減之, 餘者以高乘之, 六而一, 併入上行。 假令積罌最上行縱橫各二罌, 最下行各十二罌, 行行相次, 先以上二行相次, 率至十二, 當十一行也。 以 `芻童法' 求之 : 倍上行長得四, 併入下長得十六, 以上廣乘之得三十二, 又倍下長得十六4 4 「十六」為印刷錯誤。 據該例, 設定下長為十二, 「倍下長」應為二十四。(二十四), 併入上長得四十六5 5 「四十六」為印刷錯誤。 據該例, 設定上長為二,「併入上長」應為二十六。 (二十六), 以下廣乘之, 得三百一十二, 並二倍6 6 「並二倍”當為「並二位」之誤。 據上文, 有「並二位法」。(位) 得三百四十四, 以高乘之, 得二 (三) 千七百八十四。 重列下廣十二, 以上廣減之, 餘十, 以高乘之, 得一百一十, 併入上行, 得三千八百九十四, 六而一, 得六百四十九, 此為罌數也。 芻童求見實方之積, 隙積求見合角不盡, 益出羨積也。」

2.2. 解說和證明

圖3:芻甍、芻草垛形狀
圖4:芻童、曲池形狀

「求積尺」即求體積。 沈括所舉 8 種體積, 均《九章算術》提出的名詞, 前幾種的幾何形狀見圖 3 和圖 4。 按照他的定義, 設「上長」為 $a$, 「下長」為 $c$, 「上廣」 (寬) 為 $b$, 「下廣」為 $d$, 高為 $n$, 據術文「芻童公式」則為: $$V_{芻童}=\frac 16 [(2a+c)b+(2c+a)d]n.$$

此式所有字母都未必是正整數, 上下長寬之間、 長寬與高之間也無連帶關係。 但是, 如果遇到按照芻童的形狀堆垛起來的棋子、 酒罈等, 雖然也像反扣的斗一樣下寬上窄, 四面皆有斜度, 需要計算的卻是一個個物體, $a, b, c, d, n$ 都是正整數。 因為每個物體間都有空隙, 如果利用芻童公式計數, 其結果就「失於數少」。 這是為什麼呢?

圖5: 累棋層壇(上)及酒家積罌示意圖

設芻童垛積下層長寬都比上層多 1, 則下長、 下寬都與層數相關: $c=a+n-1$, $d=b+n-1$.

將這兩式帶入上面芻童公式, $a, b$ 為已知, 減少了兩個變數, 可得該垛積為: $$V_{ 芻童垛}=nab+\frac 12n(n-1)(a+b)+\frac 13n(n-1)^2.$$

沈括說這個結果不適用於芻童垛。 本文給出證明。 記芻童狀長方垛積為 $V_{ 芻長垛}$ (圖5上),

則 \begin{eqnarray*} V_{芻長垛}&=&\sum_{k=0}^{n-1}(a+k)(b+k)=nab+(a+b)\sum_{k=1}^{n-1} k+\sum_{k=1}^{n-1} k^2\\ &=&nab+\frac 12n(n-1)(a+b)+\frac 16n(n-1)(2n-1), \quad \hbox{式中 $k$ 為層數。} \end{eqnarray*}

顯然垛的構成下層長寬都比上層多 1, 屬於芻童狀的垛積, 其結果應是正確的。 於是 $$V_{芻長垛}-V_{芻童垛}=\frac 16n(n-1)(2n-1)-\frac 13n(n-1)^2=\frac 16n(n-1).$$

這就是說, 按照芻童公式算出的垛積要比實際的少 $n(n-1)/6$, 依沈括的說法, 「下廣以上廣減之, 餘者以高乘之, 六而一, 併入上行」, 即是在 $V_{芻童垛}$ 的結果後添加一個「羨積」: $\dfrac 16 (d-b)n$, 上面已知 $d=b+n-1$, 因此 $\dfrac 16 n(n-1)=\dfrac 16 (d-b)n$, 於是問題得證。

沈括具體舉出一例來說明: 設酒罈垛積上層長寬各 2, 即 $a=2$, $b=2$, 最下層長寬各 12, 即 $c=12$, $d=12$, 層數 $n=11$。 按照 $V_{芻童}$ 公式$+$羨積 $(d-b)n/6$, 可以逐步求出 $V_{芻童垛}=649$。 因有計數公式, 原文排印舛錯易於糾正。 也可按$V_{芻長垛}$ 公式, 直接求出酒罈總數為 649。 此外, 沈括所舉之例較特別, 是從 2 至 12 的自然數平方和, 亦為冪和公式的基本一例: $$V_{酒罄垛}=2^2+3^2+\cdots+12^2=\sum_{k=1}^{12} k^2-1=\frac 16 12(12+1)(2\cdot 12+1)-1=649.$$

最後, 沈括總結道:「芻童求見實方之積, 隙積求見合角不盡, 益出羨積也。」 就是說僅用求「實方」 (無空隙) 的芻童公式, 未將邊角之處「不盡」的體積計入, 隙積術就是要把「羨積」再加上。

附記一: 所添加的羨積也可以是: $$\frac 16(c-a)n,\quad \hbox{因}\ c=a+n-1,\ \frac 16(c-a)n=\frac 16 n(n-1)=\frac 16(d-b).$$ 因此, 沈括也可以說「下長以上長減之, 餘者以高乘之, 六而一。」即「下行別列」有兩種等值的表示方法。 但兩者只能取其一。

附記二: 羨積是否正整數與層數 $n$ 相關。 對於 $n(n-1)/6$, $n=3,4,6,7,9,10,12,\ldots$ 時羨積為正整數。 沈括所舉例子 $n=11$ 時, 羨積不為整數, 但這並不妨礙求得酒罌垛之積, 他的方法是 : 將餘項分子與芻童垛分子相加後再除以六。

這樣, 沈括應用他創造的「隙積術」, 將一個連續的幾何體積 (即「實方」) 公式有目的地改造成為一個離散的 (即「合角不盡」) 計數公式, 成為中算史上垛積術的發軔之作。

對連續和離散體積的這種細微區別, 不知道沈括是怎樣發現的; 對垛積公式的證明, 也不知道他是怎樣進行的。 人們猜測: 他建起兩者的模型, 對比計數方法, 做出大量演算, 才能深刻指出兩者的不同。 證完之餘, 我們驚異於于沈括的洞察力和簡潔的表達方式。 上面應用的雖是數列求和的基本公式, 所表示的關係並非輕易能被發現, 其推導過程亦非可一蹴而就。

沈括的這一計數公式見證了從計算連續的幾何體積轉化為計算離散的堆垛體的過程, 成為嗣後800年中算家朱世傑、楊輝、李善蘭等發展垛積術之嚆矢。

3.《夢溪筆談》棋局都數

圍棋是中國文化的重要標誌之一, 在國際上特別是東亞形成了圍棋愛好者的眾多群體。

3.1. 從圍棋的發展看問題的提出

相傳堯發明圍棋, 晉人張華在《博物志》中說:「堯造圍棋以教子丹朱」; 《路史後記》記載堯為調教兒子丹朱下圍棋「以閑其情」。 圍棋用以開發智慧、陶冶性情。 後來, 舜覺得兒子商均不甚聰慧, 也曾用圍棋教子。 一說, 「夏人烏曹作賭博圍棋」, 用於賭博。

陝西西安半坡出土的新石器時代陶罐上, 繪有 10$\sim$13 道縱橫條紋, 格子齊整, 很象圍棋盤, 被稱為棋盤紋圖案。 唐人皮日休在《原弈》中認為, 圍棋始於戰國, 為縱橫家所創, 「有害詐爭偽之道」, 此說不足為信。打開網上圍棋的歷史, 有關出土資訊俯仰皆是。

1977年內蒙古敖漢旗發掘遼代古墓, 出土圍棋方桌, 高 10cm, 圍棋盤長寬各 30cm, 縱橫各 13 道, 布有黑子 71 枚, 白子 73 枚。 遼代陳國公主墓裡也發現了木質圍棋子。

咸陽西漢中晚期甲 M6 墓葬出土石棋盤一件, 長 66.4cm, 厚 32 cm, 以黑線畫出棋格 $15\times 15=225$ 格。 湖南湘陰縣一唐代古墓出土隨葬品中有一正方圍棋盤, 縱橫各 15 道。

1954 年河北望都東漢古墓出土一石棋局, 高 14cm, 邊長 69cm, 上刻有縱橫 17 道線。 三國時魏邯鄲淳《藝經》說「棋局縱橫各十七道, 合二百八十九道, 白黑棋子各一百五十枚」。 1975 年山東鄒縣發掘西晉劉寶墓, 有一副裝在灰色陶盒裡的圍棋, 黑白共 289 子。

敦煌莫高窟石室藏南北朝《棋經》中載明當時棋局是「三百六十一道, 仿周天之度數」。

迄今圍棋盤皆 $19\times 19=361$ 格, 黑 181 子, 白 180 子。 棋局千變萬化, 舉不勝舉。 192 條線的任一交點上只能出現白子、黑子和無子的 3 種情況之一。 對於任意一局, 如果不考慮具體走法, 就會產生一個問題: 從理論上來說, 從 361 子中無論取多少、 無論怎樣擺放, 能夠形成多少種不同的棋局? 初看起來, 只要反復計算就可以解決; 但事實上連計數單位都不夠用, 將出現一個常人無法理解的天文數字。 沈括就認真思考這個大數難題, 並給出了自己的答案。

3.2. 《夢溪筆談》卷十八技藝中棋局都數原文

「小說:唐僧一行曾算棋局都數凡若干局盡之。 餘嘗思之, 此固易耳, 但數多非世間名數可能言之。 今略舉大數。 凡方二路, 用四子, 可變八[千]7 7 「千」為衍字。 凡當刪之字標在括弧[ ]內。十一局; 方三路, 用九子, 可變一萬九千六百八十三局; 方四路, 用十六子, 可變四千三百四萬六千七百二十一局; 方五路, 用二十五子, 可變八千四百七十二億八千八百六十萬九千四百四十三局; 古法十萬為億, 十億為兆, 萬兆為秭。 8 8 秭, 音z\v\i, 不作[禾弟]。 按《數術記遺》下等進位法「秭」為109; 沈括認為古法「萬兆為秭」即 $10^{10}$。 合 (算) 家以萬萬為億, 萬萬億為兆, 萬萬兆為垓。今且以算家數計之。 方六路, 用三十六子, 可變十五兆九十四萬六千三百五十二億八千二百三萬一千九百二十六局; 方七路以上, 數多無名可紀。盡三百六十一路, 大約連書萬字五十二, 即是局之大數。萬字五十二, 最下萬字是萬局, 第二是萬萬局, 第三是萬億局, 第四是億兆局, 第五是萬兆局, 第六是萬萬兆, 謂之一垓, 第七是垓局, 第八是萬萬垓, 第九是萬倍萬萬垓, 此外無名可紀。但五十二次萬倍乘之即是都大數, 零中數不與。其法初一路可變三局一黑一白一空, 自後不以橫直, 但增一子, 即三因之, 凡三百六十一增, 皆三因之, 即是都局數。又法:先計循邊一行為法, 凡十九路得一十 (一) 9 9 此處原文缺「一」字, 添入括弧( )中。 因 $3^{19}=1162261467$, 而非 1062261467。億六千二百二十六萬一千四百六十七局。 凡加一行, 即以法累乘之, 乘終十九行, 亦得上數。又法:以自法相乘。 得一百三十五兆八百五十一萬七千一百七十四億四千八百二十八萬七千三百三十四局, 此是兩行凡三十八路變得此數也。 下位副置之, 以下乘上, 又以下乘下, 置為上位, 又副置之, 以下乘上, 以下乘下, 加一法, 亦得上數。有數法可求, 唯此法最徑捷。 只五次乘便盡三百六十一路。千變萬化, 不出此數, 棋之局盡矣。

3.3. 解說和計算

《易經》裡, 任選陰、 陽爻可重複的 2 個符號置於 3 個位置, 可得八卦: $2^3=8$; 任選八卦可重複的 8 個符號置於下上兩個位置, 可得六十四卦: $(2^3)^2=64$。這稱為有重排列 (rearrangement)。 在求棋局都數時, 也遇到要把 3 個元素置於 $19^2$ 個位置的問題。

  1. 計數單位:沈括上文首先明確計數單位。「世間名數」無法表示特別大的數, 古代計數單位不足為憑, 需要以算家使用的單位 「以萬萬 $10^4\cdot 10^4$ 為億 $10^8$, 萬萬億 $10^8\cdot 10^8$ 為兆 $10^{16}$, 萬萬兆 $10^8\cdot 10^{16}$ 為垓 $10^{24}$」來計數。 從第 2 章 4 節可知, 這是《數術記遺》所述「中數」記法。 目標不是算出精確的數字, 而是「略舉大數」, 從他的下文看, 「大數」就是位數。
  2. 沈括求棋局都數第一法:設黑子個數為 $a $, 白子為 $b$, 沈括視空子是與黑白子相同的一類, 記作 $c$。 文中的「子數」也就是棋盤上的交點數, 為三者之和 $a+b+c$。 他由淺入深列出計數步驟, 遞次枚舉出指數 $n$ 為自然數平方 ($n=2^2, 3^2,\ldots,19^2$) 的冪級數數列 $\{3^n\}$: (a) 棋盤方 2 路, 用 4 子, 可變 $3^4=81$ 局; (b) 方 3 路, 9 子, 可變 $3^9=19,683$ 局; (c) 方 4 路, 16 子, 可變 $3^{16}=43,046,721$ 局; (d) 方 5 路, 25 子, 可變 $3^{25}=847,288,609,443$ 局; (e) 方 6 路, 36 子, 可變 $3^{36}=15,009,463,528,231,926$ 局。 接著他說「方七路以上, 數多無名可紀」。 棋局都數最後的結果, 「大約連書萬字五十二 $10^{4\times 52}=10^{208}$」。 他解釋說: 從第 1 個萬字 $10^4$ 開始, 到第 7 個萬字, 相當於垓 $10^{24}$; 第 9 個萬字是「萬倍萬萬垓 $10^{32}$」, 「此外無名可紀」。總的演算法:「但增一子, 即三因之, 凡三百六十一增, 皆三因之, 即是都局數」, 即 $3^{361}$。
  3. 沈括求棋局都數第二法:「先計循邊一行為法」, 一邊上有 19 個交點, 3 元素共可形成 $3^{19}=1162261467$ 局; 然後逐行計出後累乘。 如將第 $n$ 項 $(n=1,2,\ldots,19)$ 記作 $(3^{19})_n$, 「乘終十九行」, 於是獲得: $(3^{19})_1(3^{19})_2\cdots (3^{19})_{19}=(3^{19})^{19}=3^{361}$。
  4. 沈括求棋局都數第三法:「以自法相乘」: $(3^{19})(3^{19})=3^{38}=135,851,717,448,287,334$, 作為「上位」, 記作($3^{38}$)上; 另列為「下位」, 記作($3^{38}$)下, 相乘($3^{38})_{上}(3^{38})_{下}=3^{76}$, 再乘 ($3^{38})_{下}(3^{38})_{下}=3^{76}$, 作為上位 $(3^{76})_{上}$; 另列 $(3^{76})_{下}$, 相乘 $(3^{76})_{上}(3^{76})_{下}=3^{152}$, 再乘 $(3^{76})_{下}(3^{76})_{下}=(3^{152})_{上}$, 最後「加一法」, 即再乘以 $3^{19}$, 於是將 19 行分為 2, 4, 4, 8, 1 行, 經過 5 次計算, 得到 $(3^{38})(3^{76})(3^{76})(3^{152})(3^{19})=3^{361}$。 以上三種演算法都具有一定複雜性, 沈括力求計算量達於最小。
  5. 現今的分析:為判定棋局都數的位數, 可對 $3^{361}$ 取對數, 知: $$\log 3^{361}=361\times 0.4771212547=172.24077295,$$ 對數首數加 1 得位數: $172+1=173$, 表明 $3^{361}$ 是一個 173 位的數: $10^{174}\gt 3^{361}\gt 10^{173}$。 網上有的說該數為 $10^{164}$, 偏小; 有的說為 $10^{768}$, 偏大。 「大約連書萬字四十三」才是正確的。 在上述計算中, 任將 3 個可重複的元素置於 $19^2$ 個位置, 由於是有重排列, 就會出現包括 $181\lt a\le 361$, $180\lt b\le 361$, $c=361$ 在內的情況, 即出現圍棋盤上 361 交點全黑、或全白, 或全部無子, 等等, 與圍棋規定相悖 ($c=361$ 表示尚未下棋, 不能算作一局)。 另外, 還沒有考慮「打劫」、 「提子」等情況。 這些都給精通圍棋的數學愛好者提出了更深刻的課題。

實際上, 沈括提出「棋局都數」的意義, 主要在於構造指數 $n$ 為自然數平方的冪級數數列 $\{3^n\}$, 使人們認識到指數以平方增長, 數列便迅猛擴張, 立即達到無法掌控的境地。 沈括的成就, 向人們展示出: 數學家的任務, 就是須要提供最優演算法, 對巨大的數作出估計。

參考文獻

胡道靜, 金良年。 夢溪筆談導讀[M]。 北京:中國國際廣播出版社, 2009: 導言1。 杜石然等編著。 中國科學技術史稿。 下冊[M]。 北京:科學出版社, 1982: 24-32。 葉鴻灑。 北宋科技發展之研究[M]。 臺北:銀禾文化事業有限公司, 1991。 [宋] 沈括著, 侯真平校點。 夢溪筆談[M]。 長沙: 嶽麓書社, 2002: 校點前言 1。此書認為沈括生卒年是 1033-1097。 [宋] 沈括著, 侯真平校點。 夢溪筆談。 卷十八技藝[M]。 長沙: 嶽麓書社, 2002: 127-128。 同上, 129-130。

---本文作者任教中國內蒙古師範大學科技史研究院---