2008年,清華大學組織專家鑑定研究了一批戰國中晚期的竹簡,簡稱「清華簡」。這批簡中有一組形式特殊的簡,後研究出它是基於「大九九」運算的計算工具,後被命名為《算表》。它是先秦數學與計算技術發展的直接實物證據。研究發現,《算表》不僅可以用來進行乘法運算,還可能有除法和開平方的拓展功能。這一算表是目前我國最早的十進位立成算表,在中國和世界數學史上具有獨特的意義和價值。
撰文 | 馮立昇(清華大學科學技術史暨古文獻研究所教授)
我今天想和大家談一談清華簡中與科技有關的一個內容,也可以稱得上是中國古代一項重要的發明創造,它就是清華簡中的《算表》。我曾參與了清華簡《算表》的整理工作,對這個《算表》有一些看法和認識。有一些觀點未必完全正確,希望得到大家的批評與指正。
我想從以下五個方面來做介紹:一、清華簡的發現及其整理與釋讀過程;二、《算表》的構造和它的基本功能;三、《算表》與古代文獻記載中的乘法表比較;四、關於《算表》可能的擴展功能;五、《算表》蘊含的原理及其在數學史上的意義。
一 清華簡的發現及其整理與釋讀過程
2008年7月,一位校友從海外購置了一批竹簡,捐贈給清華大學。經過專家鑑定和碳十四檢測,證實這批簡形成於戰國中晚期,抄寫年代約在公元前305年,距今已有2300多年。從簡的文字風格來看,具有明顯的楚文字的特點。這批簡在入藏時,共有2388枚,後來經過拼合,一共整理出2500餘枚。這是迄今為止出土的各批戰國簡中,數量最多的一批。從內容上來看,絕大多數都是嚴格意義上的書籍,而且大多數是前所未見的經史類文獻,具有極高的文獻價值、文物價值和學術意義。
為此,2008年8月,清華大學成立了出土文獻研究與保護中心(以下簡稱「中心」),請著名古文字學家、歷史學家李學勤先生擔任中心主任,來主持清華簡的整理和研究工作。
2008年12月下旬開始,中心專家與清華大學美術學院的專業攝影師一起,開展了對清華簡的攝影工作。為了儘可能清晰而又準確地表現簡的原貌,專家與攝影師們反覆試驗,終於,經過20多天的辛勤努力,在2009年1月中旬的時候,完成了清華簡的拍攝工作。
2009年3月開始,中心啟動了清華簡的初步釋讀工作。其中,最早被整理出來的一篇竹簡叫《保訓》。2009年4月13日,李學勤先生在《光明日報》上發表了《周文王遺言》一文,比較全面地介紹了這篇簡文的情況。
那麼,《保訓》是一篇什麼樣的文獻呢?它全篇共有11支簡,每支簡的長度為28.5釐米,字數從22字至24字不等,其中第二支簡上半部殘缺,其他內容大體齊全。《保訓》這篇簡文的內容,完全是《尚書》的題材,保留了很多出土和傳世文獻中沒有的內容。它記載了周文王臨終前對其子武王的遺言,裡面提到了堯舜和商朝祖先上甲微的傳說。
這篇文獻的內容是前所未見的。其中包含的中道思想,與儒學的中庸思想有相通之處。這篇簡文開頭說:「惟王五十年」,從這個紀年方式來看,我們推測這裡「王」指的是周文王,在周代只有文王正好做了五十年的王。這句話對於簡文的斷代十分重要。後來又在簡文中找到了「王若曰:發」的字樣,我們知道,「發」指的就是周武王「姬發」,那麼,簡的時代就更加明確了。《保訓》反映了周文王時的一些史實,也記載了周和商之間的關係。這篇簡文非常重要,中心就先把這個做了整理,後來又陸續做了大量的整理工作,每一年都有新的成果發表。現在已經整理了一多半,整理工作還在持續進行中。
在整理過程中,發現了一類形式非常特殊的簡——長度在43.5-43.7釐米之間,比同批的簡都要長,寬度達1.2釐米,比其他簡明顯寬一些。這類簡有21支(圖1),其中完整的有17支,另外4支上端有殘缺。每支簡的上端,都有一個圓孔。還有一支是沒有書寫文字的空白簡,上面有20個圓孔,這些孔內都留有絲帶殘留物。除了形制外,簡的文字也比較特殊,主要是一些數字,而且仔細觀察每支簡,這些數字都是有規律的,有著明顯的數學含義。李學勤教授知道我在清華從事數學史研究工作,於是邀請我參與這批簡的整理和釋讀工作,並安排出土文獻中心的古文字學家李均明教授和我共同承擔整理研究工作。
最初我們把這21支簡稱為《數表》,因為它全是數字。但是初步整理工作完成之後,我們發現它有計算功能,可以說是一個很明顯的計算工具。2010年7月12日,我們邀請了國內著名的中國數學史研究專家開了一個座談會。經過討論,專家們建議不要叫《數表》,這個名字不能涵蓋它的含義,不能概括它的功能,建議把它叫作《算表》。於是,我們採納了專家們的建議,將它命名為《算表》。
圖1 《算表》照片
圖2 表示四分之一與二分之一的字
《算表》簡寬1.2釐米,厚0.13釐米,呈黃褐色。原冊以三道繩編聯,原來的編繩已經無存,不過它的痕跡保留了下來。上編繩距離竹簡的頂端、下編繩距離竹簡的底端都是2釐米,中編繩基本在整個竹簡的中部。另外,竹簡從上至下,共有18條紅色的欄線,橫穿於21支竹簡的簡面。除了最上端和最下端的紅色欄線外,其他16條欄線都是經過先墨後朱兩次繪製而成的。18條欄線加上三道編繩,一共21條線,將整個《算表》橫向隔成20「列」。而每支竹簡自然構成為表格縱向的豎「行」,一共21行(圖3)。
表格的首列分為上下兩排,第一排為數字,第二排是前面提到的圓孔,由於有兩支竹簡殘缺,能看到圓孔的竹簡一共有19支。還有一支比較特殊的簡,沒有書寫數字,自上而下一共有20個圓孔,從孔中的絲狀的殘留物來看,它的功能就是用來穿線的。
圖3 《算表》複製品
《算表》21支簡入藏時的順序是錯亂的,我們最初的復原方案是由左至右排列。雖然從數學規律上來看,這是沒有問題的。不過後來,我們發現了簡背的一條劃痕,根據劃痕,我們調整了復原的順序,從右至左,就是現在我們看到的這樣一個結構。
20橫列、21豎行,縱橫交織,構成一個乘法表,橫列表頭與豎行表頭的數字,十字相交的點,就是這兩個數的乘積。我們把竹簡中的楚文字改寫成現在的阿拉伯數字,便得到了一個有重要數學意義的乘法算表。這是中國數學史上的一個很重要的發現。
我們在初步整理完成之後,向從事數學史研究的同行陸續做過一些介紹,引起了國際數學史研究者的高度重視。曾經擔任國際數學史學會主席、《國際數學史雜誌》主編的美國紐約市立大學道本周(Joseph W. Dauben)教授來中國訪問時,我們把他請到了清華大學,向他介紹了《算表》。他認為這是一個很驚人、很重要的發現,意義非凡,這是世界上最早的十進位乘法表實物。國際數學大師、菲爾茲獎獲得者丘成桐教授,聽說這個《算表》後,提出要看一下這些簡。李學勤先生和我陪同他考察了簡的內容,跟他講了《算表》的數學內涵。他很感興趣,也認為這是一個很重要的發現。
2013年年底,《清華大學藏戰國竹簡(肆)》在中西書局出版,收錄了整個《算表》。解讀工作是由李均明教授和我兩個人完成的。2014年年初的新聞發布會上,我們發布了這個成果。當時央視做了報導,英國的Nature雜誌也很感興趣,專門採訪了李均明和我,並且在Nature的網絡版上做了一個專題報導(圖4)。他們還找了國外的數學史專家,比如一位研究古巴比倫數學史的學者,對《算表》的成就進行了論證,確認了《算表》在世界數學史上的價值。Nature的這個專題報導被很多媒體轉載,比如《科學美國人》《華盛頓郵報》。
圖4 Nature報導
另外,2014年8月,國際數學家大會在韓國首爾召開,其中數學史專題會議在日本東京召開,大會的組織者邀請我在會上作了一個報告,來介紹清華簡《算表》的整理情況。參會的好多數學史專家非常感興趣,會後找我一起討論,一起吃晚餐,又做了深入的交流。
二 《算表》的構造和它的基本功能
《算表》實際上是基於九九口訣表製作的一個數學計算工具。我們把楚文字轉寫成阿拉伯數字,根據算表規律,補上殘缺的數字,可以得到如圖5一樣的數學表格。
圖5 清華簡《算表》的構造形式
全表一共有20橫列、21豎行,行列交叉,組成420個長方格,也就是構成算表的「單元格」。整個表格可以分成三個功能區。最外側淺灰色區域是第一功能區,我們把它叫作因數區。橫向第一列上排位置第三簡起,按由右至左、由大到小的順序,每格依次排列90、80、70、60、50、40、30、20、10、9、8、7、6、5、4、3、2、1、1/2共十九個數字;縱向右側第一行第二格起,從上而下,每格數字也按照由大到小的順序排次從90到1/2各數。這個功能區內的橫向和縱向數字,相當於乘法運算中的乘數和被乘數。
第二功能區是深灰色區域,沒有數字,每格都有一個圓孔,是專門為了穿引線而設置的區域。這個區域的作用是,在乘法運算中,通過拉直乘數與被乘數對應圓孔的引線,使兩條線縱橫交叉,來確定乘積。
表格的其餘部分,是第三功能區,也就是乘數和被乘數的乘積區。為橫向上起第二至二十列、縱向右起第三至二十一行,縱橫一共361格。其中,單元格中最大的數字是90×90=8100,最小的數字是1/2×1/2=1/4。
這個《算表》的核心是由乘數、被乘數「1」至「9」與乘積「1」至「81」諸數組成的九九表。被乘數及乘數為十位數與積數超過「81」的部分,都是核心部分的延伸和擴展。如圖5,第三功能區中的橙黃色部分是核心部分,其餘部分是擴展。
根據《算表》三個功能區所具備的客觀條件,我們分析發現此表可以用來進行多種運算操作。基本的運算功能如下:
1.一位數整數乘法,比如:9×9。2.兩位數整數乘以一位數整數乘法比如:81×7。3.任意兩位數整數乘法,比如12×35。4.整數部分不超過兩位、非整數位為特定的1/2的三位數乘法,比如81× ×81 。
下面我們來分別講一下,看看如何用這張算表進行這些基本運算。
一位數乘法,實際就是九九乘法表的功能,直接在表上可以查出,不必介紹。
兩位數乘以一位數乘法,和兩位數的乘法,在操作上是基本相同的。從第一功能區的橫欄或縱行乘數或被乘數對應的第二功能區的圓孔中,引出因數線:十位數從十位數引出;個位數從個位數引出;分數從分數位引出,然後分別相乘,依次相加。
我們以12×35為例:將12分解為10與2,分別從第一功能區的橫欄「10」與「2」對應的圓孔處拉出引線;然後將35分解為30與5,分別從第一功能區的縱行「30」與「5」處對應的圓孔處拉出引線。縱向兩條引線,橫向兩條引線,兩兩相交,形成四個交叉點。把這四個交叉點對應的四個單元格的數字,依次相加,得到的結果,就是最終的乘積。如圖6所示。
圖6 兩位數的乘法示意圖
用算式來表示運算過程,是這樣的:
12×35= (10+2)×(30+5)=300+60+50+10=420
對於含 的帶分數乘法,運算方法是完全一致的。比如我們來計算 32 ×45 ,先把帶分數32分解為30、2、1/2三數,分別從橫欄30、2、1/2對應的圓孔處拉出引線;再將整數45分解為40、5、1/2三數,分別從豎行40、5、1/2對應的圓孔處拉出引線。橫線三條與縱線三條,兩兩相交,形成九個交叉點,對應九個單元格的數字。把這些數字依次相加,就是最終的乘積。如圖7所示。
圖7 含1/2的帶分數乘法示意圖
用算式表示為:
32 ×45 =(30+2+ )(40+5+ )=1200+80+20+150+10+5/2+15+1+ =1478
根據乘法對加法的分配律,《算表》乘積最大值應該是:
(90+80+70+60+50+40+30+20+10+9+8+7+6+5+4+3+2+1+ )×(90+80+70+60+50+40+30+20+10+9+8+7+6+5+4+3+2+1+ )=495 ×495 =245520 ,雖然操作起來比較麻煩,但是《算表》是能夠實現這樣的運算的。
三 《算表》與古代文獻記載中的乘法表比較
《算表》是用來做乘法的計算工具,是九九表的延伸和擴展。在出土和傳世的文獻中,有很多九九乘法表的記載,我們不妨把《算表》和這些乘法表進行一下比較,從而說明《算表》的獨特價值和意義。
與《算表》年代比較接近的古代乘法表,是裡耶秦簡中的九九口訣表。
圖8 裡耶秦簡的九九口訣表
釋文如下:
通過觀察不難看出,《算表》與裡耶秦簡「九九表」有兩點是一致的。一是二者的排列順序,都是由大數字到小數字;另一個相同之處是,二者均出現了「半」,也就是分數1/2,不同的是,《算表》是從90至1/2,而「九九表」則是從9至1/2。
同時,二者也存在不一樣的地方。《算表》中有1×1及其乘積1,而「九九表」沒有。不過,「九九表」有「一一而二」,這其實是加法運算,即1+1=2。《算表》中有 × ,及其積數 ,而「九九表」無。更加明顯的不同是,《算表》是典型的表格,並且有用於聯繫乘數和被乘數的引線,而「九九表」沒有。
中國傳統的九九乘法口訣表,有「大九九」和「小九九」之分。「大九九」即1至9中的九個數,每兩數相乘所得乘積,共八十一句口訣。「大九九」包括小因大因相乘(被乘數小,乘數大)、大因小因(被乘數大,乘數小)相乘、等因(被乘數與乘數相等)相乘。「小九九」則只包括小因大因相乘和等因相乘兩種。比如,「大九九」包括「八九七十二」「九八七十二」,而「小九九」只有前一句,沒有後一句。乘法滿足交換律,「小九九」只需四十五句口訣,便可以實現與「大九九」相同的作用。
在九九口訣中,實際上最重要的是2至9中任意兩個數的乘積。1與1至9的乘積,不列出來也可以。古代的「小九九」口訣,多數為「九九八十一」起到「二二如四」止,沒有「一九如九」「一八如八」等用1乘各數的九句,只有三十六句。裡耶秦簡的《九九表》屬於「小九九」,且未列出1與各數的乘積,不過多了「一一而二」和「二半而一」兩句,前一句即1+1=2,後一句即1/2+1/2=1,實際是兩句加法口訣。另外,末位多了一句「凡一千一百一十三字」,「字」是數的意思,這是每句口訣運算結果的總和,即:81+72+63+……4+2+1=1113。
《算表》的核心部分是通常所說的完整的「大九九」。九九口訣在戰國時代已經非常流行了,《管子》《戰國策》《荀子》《逸周書》《穆天子傳》《鶡冠子》《呂氏春秋》等文獻常常引用「九九」的一句或者若干句口訣,不過,這些都屬於「小九九」的範疇。漢代以來的文獻,包括出土的簡牘,所記載的九九口訣,也主要是「小九九」。明清數學著作中才見到「大九九」乘法表。過去,我們對於「大九九」乘法表出現的年代一直沒有搞清楚。《算表》的發現,表明「大九九」表在先秦時期就已經出現了。宋元時期,隨著數學水平的提高,人們覺得不必再用「大九九」,用「小九九」就可以解決問題,「大九九」逐漸被拋棄了。隨著珠算的興起,「大九九」可以提升珠算運算的速度,這就是明清珠算著作重新採用「大九九」的原因。
《算表》九以上以及半的乘法,實為「大九九」表分別向高位和低位的擴展和延伸。它是通過「大九九」結構的重組而完成的,即把乘數、被乘數集中在一起,而把按照一定規律排列起來的乘積組成另外一組。為了定位準確和使用方便,又專門設置引線將乘數、被乘數和乘積三者聯繫在一起,使其成為相當便捷的計算工具。由於《算表》數字通過兩個類似坐標定位的方法排列成了表格,它實際上還可以進一步擴展和推廣,如再加上100至900,這樣便可以進行任意三位數的乘法運算。當然,這樣做需要更大、更多的竹簡,並且擴大了布算面積,勢必會影響《算表》的便捷性。
除了裡耶秦簡外,北大秦簡中也有兩個「九九表」。其中,北大木牘M-025上抄寫的「九九表」,與裡耶秦簡完全相同;而在北大秦簡《算書》甲篇中的「九九表」,始於「九九八十一」,終於「一一而二」,與裡耶秦簡略有差異。
另外,漢簡中也有「九九表」,如張家山漢簡、敦煌漢簡、居延漢簡等,有殘的也有全的,一般都是從「九九八十一」開始,按由大到小的順序排列。
前面講的是出土文獻中的九九表,我們接下來看一下傳世文獻。傳世文獻中的九九口訣可以追溯到很早的時候,比如魏晉時期注釋《九章算術》的劉徽,他在《九章算術注序》中說:
昔在庖犧氏始畫八卦,以通神明之德,以類萬物之情,作九九之數,以合六爻之變。
劉徽認為「九九之數」是上古時代的伏羲氏創造的。這個年代顯然太早了,雖然不能否定這種可能性,但從數學史的發展規律來看,上古時代的數學還達不到出現「九九表」的水平。
我國古代《算經十書》之一《周髀算經》,在這本書的卷上,有一段周公和商高的對話,也談到了「九九表」的起源問題:
昔者周公問於商高曰:「竊聞乎大夫善數也。請問古者包犧氏周天曆度,夫天不可階而升,地不可得尺寸而度。請問數安從出?」商高曰:「數之法出於方圓。圓出於方,方出於矩,矩出於九九八十一。……故禹之所以治天下者,此數之所生也。
這段話翻譯過來的意思是,周公曾經問商高:「我聽說你擅長數學,我有個問題不解。當初伏羲氏建立周天度數,可是天空遙遠寬廣,沒有階梯可以攀登,大地浩渺遐遠,沒有尺度可以去測量。那麼,這些度數是從何處得來的呢?」商高回答說:「數的方法出自方和圓。圓的度數來自方,方的度數來自矩尺,而矩尺的度數則來自九九八十一。……當初大禹就是用這些來治理天下的,這就是數產生的源頭。」這個「九九八十一」,就是九九口訣,被商高當作數產生的源頭。這是西周時期。
我們再看一下成書於西漢武帝時期的《韓詩外傳》,這本書的第三卷有這麼一段話:
齊桓公設庭燎,為士之欲造見者。期年而士不至。於是東野鄙人有以「九九」見者。桓公使戲之,曰:「『九九』足以見乎?」鄙人曰:「臣不以九九足以見也。臣聞君設庭燎以待士,期年而士不至。夫士之所以不至者,君,天下賢君也,四方之士皆自以為不及君,故不至也。夫『九九』,薄能耳,而君猶禮之,況賢於『九九』者乎?」……桓公曰:「善。」乃因禮之。期月,四方之士相導而至矣。
這段話說的是,齊桓公在庭院裡燃起明亮的火炬,來招納有識之士。可是過了一年,一個人也沒招上。這時來了一個通曉「九九之術」的鄉下人。齊桓公看不起他,說你這種是雕蟲小技,有資格來求見君王嗎?這個人回答說:「我聽說君王在庭前擺著明亮的火炬,為了等待賢士求見,可過了整整一年,沒有士人來。士人之所以不來,是因為君王是天下賢王,士人自以為比不上君王,所以不來。九九術是一種淺薄的技能,君王還能以禮相待,何況那些具有比通曉九九術更高明、更有才能的人呢?」桓公聽了,很高興,於是以禮相待。過了一個月,天下士人便相互引導而來。這是一個故事,不一定是史實。但可作為旁證,說明了早期的「九九表」是很基本的計算技能,是很多人都能掌握的「小技」。另外,戰國時代的很多文獻,對「九九表」都有所引述,比如《管子·地員》:
命之曰五施,五七三十五尺而至於泉。命之曰四施,四七二十八尺而至於泉。命之曰三施,三七二十一尺而至於泉。命之曰再施,二七十四尺而至於泉。
這些文獻大多引用一句或若干句,雖然不完整,也能夠看出「九九表」在戰國時代的流行。
傳世文獻中,最早記載四十五句「小九九」口訣的,是西晉成書的《孫子算經》。《孫子算經》中的九九口訣是在算題中出現的,比如:
九九八十一,自相乘得幾何?答曰:六千五百六十一。
八九七十二,自相乘得五千一百八十四。八人分之,得六百四十八。
圖9《孫子算經》中涉及九九口訣的算題
稍晚出現的敦煌卷子中,也有「九九表」。比如敦煌《立成算經》中的「九九表」,但不完整。敦煌漢文算書《算經一卷》有完整的「九九表」。敦煌卷子中還有一張《田積表》,當年被伯希和劫走,藏在法國國家圖書館中,編號為P2490。《田積表》是計算田畝面積的表格,其中涉及了九九口訣的運算。
圖10 敦煌漢文算書《算經一卷》(部分)
前面介紹的文獻,時代都在清華簡之後,與《算表》在某些方面有相同或相通的地方。《算表》的發現使過去的一些判斷得到了進一步的證實。比如,過去我們根據大量先秦文獻引用「九九」的一句或者若干句,推測在春秋戰國時期應該已經有了完整的九九乘法口訣表了,但一直以來沒有得到證實。清華簡《算表》的出土,使我們確定無疑地坐實這種推測。另外,製成表格的算法形式,是中國傳統數學和歷算中的重要形式,但它出現的年代不清楚,《算表》使我們發現了其更早的淵源。
四 關於《算表》可能的擴展功能
我們已經介紹了《算表》的基本功能,也就是乘法運算。其實,根據《算表》三個功能區所具備的客觀條件,這個表還可以用來做一定範圍內的整數除法和開平方運算。不過,當時是否已經利用《算表》進行這樣的運算,還有待於進一步的研究。
怎麼進行除法運算呢?除法運算的關鍵,是找出被除數在九九表中的位置,然後利用引線在表中找到商數。運算步驟如下:
1.首先從第一功能區(任選橫欄或縱行)除數所在數字處,引出除數線;如果除數是多位數,先把多位數分解,然後分別引出多條除數線。
2.在除數引線通過的表格中,尋找和被除數相等的數(如果除數是多位數,就把多條平行的除數線相應位置的數相加)。然後,從此數引出與除數呈直角的商數線,商數線所指向第一功能區中相應的數,就是商數。
3.如果首次未能找到與被除數相等的數,則找出最接近的數。然後用被除數減去這個最接近的數,得到一個餘數。再從上述除數引線經過的單元格中,找到與餘數相等的數(多條平行線,仍舊將相應位置的數字相加)。然後從此數引出與除數引線垂直的商數線,所指向之第一功能區中相應的數,就是商數。未能除盡的,尾數可以用分數來表示。
我們用一個例子來說明一下,比如3808÷68,如圖11所示:
圖11 《算表》除法運算示意圖
第一步,除數68是兩位,分解為60與8。
第二步,從第一功能區(橫欄或縱行都可以)數字60和8對應的圓孔內,分別引出除數線。
第三步,兩條除數線穿過的單元格中,找出對應位置的兩個數相加之和等於或者小於但最接近除數的數,所見為「3000+400」,相加得3400,是小於3808的最大的數。
第四步,將3000與400的連線延伸至另一功能欄,指向數字50,就是商數十位的數值。
第五步,用被除數3808減去3400,得到餘數408。然後,在上述兩條平行引線經過的單元格中,找到位置相應的兩個數,二者相加與餘數408相等,所見為「360+48」。
最後,將360與48的連線延伸至功能欄,指向數字6,得到商數的個位數值。
最終計算結果就是56。
這是除法運算。開平方運算與除法有相通之處。不同的是,必須利用算表的對角線,對角線上的數都是完全平方數。具體的方法是,從《算表》右上角引線至左下角,設為對角線,在對角線中找出與被開方數相等,或小於開方數但最為接近的數,然後用引線在表中找相應的數,進而計算出平方根數。我們通過具體的算例,略加說明。
比如我們來求1849的平方根,如圖12所示。
圖12《算表》開方示意圖
首先,在算表對角線穿過的單元格中,找出小於被開方數1849,又和它最接近的數,這個數是「1600」。從1600作縱橫引線,分別延伸至第一功能區,對應的數是40,40便是平方根的十位數。
然後,用被開方數1849減去1600,得到餘數249,這個數折半,得124 。
再然後,在上述縱橫引線經過的單元格內,找到小於124但又和它最接近的數,這個數就是120。從120處作縱橫引線,對應的第一功能區數字為3,3就是平方根的個位數。
因此,正好被開盡,得:
五 《算表》蘊含的原理及其在數學史上的意義
(一)《算表》蘊含的原理
從數學原理角度來看,《算表》蘊含了三個原理:
1. 十進位值制的應用。2. 乘法交換律的運用。3. 乘法分配律的運用。分析《算表》的內容,可以發現它應用了十進位的計數方法,並且用到了乘法的交換律、乘法對加法的分配律,以及分數等數學原理和概念。它不僅能夠直接用於兩位數的乘法運算,也可以用於除法運算,並且能夠對分數1/2或含有1/2的帶分數進行某些運算。這個《算表》操作便捷,攜帶方便,實用性強,是當時實用的運算工具。它的發現,為認識先秦數學的應用與普及,提供了重要的直接史料和豐富的信息。
《算表》的設計要直接用到乘法的交換律,算表結構圖的第一功能區中的橫向第1列數字和縱向右起第21行數字,是以對角線軸線對稱排列的,在乘法運算中為乘數或被乘數。設ai為第1橫列中的任意一數,bj為縱向右起第21行中的任意一數,ai×bj=bj×ai。
在進行任意兩位數的乘法和除法運算時,要用到乘法對加法的分配律。比如,計算12×4,首先要將兩位數「12」分解為10與2,分別從10與2處引線,縱橫交叉,得到乘積。整個運算過程,如果用算式來表示,相當於:
12×4=(10+2)×4=(10×4)+(2×4)=48
古人在利用《算表》計算時,輔助以心算或者當時普遍採用的籌算,來進行加減法的運算。在整數的四則運算中,用籌算做加減法是十分簡便的。不過,用籌算進行兩位數以上的乘除法和開方運算時,需要用到的算籌較多,並且布算和操作複雜,對初學者來說,掌握並熟練運用這種技能很有難度。另外,籌算在運算時,不能保留和記錄中間的運算結果,難以驗算。而用《算表》在進行乘除運算時,不僅操作快捷簡便,而且可以獲取中間運算結果,方便驗算,可以在很大程度上克服籌算的缺點。另外,《算表》也方便初學者練習籌算。
(二)《算表》在中國數學史上的意義
《算表》在中國數學史上的意義體現在下面幾個方面。
《算表》是先秦數學與計算技術發展的直接實物證據,不僅比張家山漢簡《算數書》、嶽麓書院藏秦簡《數》要早,而且包含的內容是上述簡牘中所沒有的,是認識先秦數學水平的重要史料。
《算表》是目前所知道的中國最早的立成算表,為我們探索「立成算表」的源頭提供了重要依據。
《算表》不僅比目前所能見到的古代十進位乘法表年代都早,而且它所具備的數學與計算功能也超出了裡耶秦簡「九九表」、張家山漢簡「九九表」等古代乘法表的水準。它的發現表明了先秦的數學,尤其是計算技術,已經達到了相當高的水平。
另外,《算表》也佐證了春秋戰國時期是中國傳統數學的第一個高潮。
我們前面講到,九九口訣在戰國時代就已經很流行了,不過當時所見到的都是「小九九」。漢代以來的文獻,包括出土簡牘,記載的九九口訣也主要是「小九九」。直到宋代以後,隨著珠算的流行,數學家們才開始重視「大九九」。比如宋代數學家楊輝在《乘除通變算寶》中說:
因九九錯綜而有合數陰陽,凡八十一句。今人求簡,止念四十五句。算家唯恐無數可致,豈得有數不用乎?
表明楊輝主張用八十一句的「大九九」表,不過,當時流行的仍舊是「小九九」表。明代王文素《算學寶鑑》卷一「九九合數」一節中,給出的是「大九九」表,表明他對楊輝意見的贊同。
不過,過去一直沒有搞清楚「大九九」表出現的時間。而《算表》的發現,說明「大九九」乘法表早在先秦時期就已經出現了。
《算表》的核心是由「9」至「1」及其乘積「81」至「1」諸數構成的乘法表,被乘數和乘數為十位單位數(10至90)、分數1/2及其積數,都是核心部分的延伸擴展。《算表》中數字的排列方式與中國早期九九口訣一致,按照由大到小的順序排列。可見,它是當時已經廣泛使用的九九算術衍生出來的運算工具,是中國古代計算技術發展到一定階段的產物。在中國數學史上,《算表》佔有一個很重要的位置。
(三)《算表》在世界數學史上的意義
明確了《算表》在中國數學史上的地位,我們將目光投向同時期的世界,通過橫向比較,探討一下《算表》在世界數學史上的意義。
首先來看看古巴比倫的數學。我們知道古巴比倫的數學十分發達。古巴比倫人在進行算術計算時用到了各種數表,有許多刻在泥板上的乘法表保存下來。不過,在這些乘法表中,我們從未發現過加法表。迄今分析過的200多張古巴比倫數表,沒有一張加法表。我們知道,古巴比倫的位值系統是六十進位的,不是十進位,它基本的數字多達59個,乘法表十分龐大。這種表的任意一張只是某一個數的倍數表,實際就是某一個數的乘法表。如果造一個完整的表系,古巴比倫人需要為從2到59的每一個數字都造出一張相應的表。
圖13 美國哥倫比亞大學圖書館所藏古巴比倫數學泥板
我們來看看幾張古巴比倫乘法表的現代簡化形式,如圖14:
圖14 古巴比倫乘法表
從左至右第一個是2的乘法表,第二個是6的乘法表,第三個是9的乘法表。以9的乘法表為例,原表是1×9,2×9,3×9……20×9,接下來,是30×9,40×9,50×9。古巴比倫人用到的乘法表都是這種某個數的乘法表,沒有一張完整的表。實際上,造出一張完整的60進位乘法表,體量將十分龐大,不太容易實現。那麼用古巴比倫的乘法表如何計算呢?實際上與我們的計算方法相似。
比如,計算34×9,先把34分解為30和4兩個數,利用30這個數的乘法表,找到30×9的六十進位結果4,30(首位為4,次位30,轉成十進位為270);再利用4這個數的乘法表,找到4×9的六十進位結果36(六十進位的末位,轉成十進位為36),然後將二者相加,得5,06(轉成十進位為306)。為了將兩位的60進位數相乘,需要造出好多這樣的乘法表。由於乘法表過於龐大,並且需要非常多的算表,使用起來很不方便。可見,古巴比倫人的數學水平固然很高,但是計算技術還不是很高明,不夠高效。
阿拉伯的數學也比較發達。在阿拉伯數學中,較早地使用了現代表格形式的十進位乘法表。由於時間關係,我沒有找到很早的十進位乘法表,這裡有一個出現比較晚的,和早期阿拉伯乘法表的形式差不多的表。這就是15世紀上半葉阿拉伯數學家阿爾·卡西(AlKashi)在《算術之鑰》(1427)中給出的乘法表,相當於我們的「大九九」表,如圖14。
圖15 阿拉伯數學家阿爾·卡西《算術之鑰》(1427)中的乘法表及翻譯
阿爾·卡西在書中指出:
下面用表的形式給出了一至十數字的乘法。乘數和被乘數分別寫在行和列格子內,他們的乘積寫在乘數和被乘數所在的行與列相交處的單元之內。每個從事計算的學者應該背熟該表,因為多位數相乘時,還要用到這一法則。
這個表和我們的《算表》,在形式上是比較一致的。歐洲出現十進位比較晚。歐洲最早的十進位乘法表,見於十三世紀的數學名著《計算之書》(Liber Abaci,1202年初版,1228年再版),這是義大利數學家斐波那契(Fibonacci,約1175-1245)的著作。這部書中記載的乘法表形式如圖15所示。
圖16 《計算之書》中的乘法表
這是從2至10的九個數中,每兩個數相乘所得乘積的算表。和我國四十五句「小九九」乘法口訣相比,缺少1乘各數的乘積,不過多了10乘各數的乘積。這個表不同於後來歐美流行的乘法表,一般認為這是十進位乘法表的初級形式。這個表不太好用,《算表》縱橫對應,一下就能找到兩數的乘積,而這個表不太容易找。這是歐洲13世紀的乘法表,還不如我們的《算表》快捷,可見他們的計算技術還是比較落後的。
直到文藝復興時期,歐洲才使用現代表格形式的十進位乘法表。比如德國數學家維德曼(J. Widmann,約1460-1499)在1489年出版了一部算術書,書名叫《商業捷算法》(Behende und hübsche Rechnung auff allen Kauffmanschafften)。在這部書中,有一個乘數、被乘數為9至1的乘法表。這部書在當時的歐洲很流行,多次再版。
圖17 《商業捷算法》九九乘法表
圖17是1500年再版的《商業捷算法》中兩種形式的九九乘法表,包括了我們前面所說的「大九九」和「小九九」乘法表。這個表在形式上和清華簡《算表》的核心部分一致,但時間卻晚了將近一千八百年。圖18是明末成書的《同文算指》中的「九九表」。《同文算指》是義大利傳教士利瑪竇和李之藻共同翻譯的數學著作,這裡面著錄的「九九表」,來源於利瑪竇的老師,德國數學家克拉維烏斯(C. Clavius)的《實用算術概論》(Epitome Arithmeticae Practicae,1583)。這正是當時西方流行的乘法表,和前面《商業捷算法》中的乘法表很相似。
圖18《同文算指》中的乘法表
綜上所述,《算表》在世界數學史上獨具特色。古巴比倫人在進行算術計算時用到了各種數表,但是由於其計數系統是六十進位的,導致乘法表非常龐大,每張表都是某一個數的倍數表,需要非常多的算表才能實現實際的計算操作,使用起來很不方便。而《算表》不僅利用一張表就可以進行100以內的任意兩位數乘法運算,而且可以進行更加複雜的除法運算和開方運算,操作非常簡單。《算表》的計算功能,較古代其他地區出現的乘法表功能都要強大。
早期的阿拉伯數學雖然採用了現代表格形式的十進位九九乘法表,但它的功能顯然不及《算表》強大。歐洲的十進位出現很晚,最早見於13世紀的數學著作中,還只不過是十進位乘法表的初級形式。文藝復興時期才採用現代表格形式的十進位乘法表,從時間上來看,遠遠晚於《算表》。因此,從整個世界範圍來講,尤其從計算技術角度來說,《算表》在世界數學史上也有著重要的意義。
本文原文發表於《格致·考工·源流:中國古代科技發明創造》(北京大學出版社,2020),編輯略有改動。