战国时期的“大九九”计算工具——清华简《算表》

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)中的乘法表及翻译

阿尔·卡西在书中指出:

下面用表的形式给出了一至十数字的乘法。乘数和被乘数分别写在行和列格子内,他们的乘积写在乘数和被乘数所在的行与列相交处的单元之内。