《孙子算经》列为“算经十书”之一,流传广泛,成为中国古代重要的数学典籍(图3-1)。
图3-1 1890年刻《孙子算经》内封与《孙子算经》卷端
一、《孙子算经》的成书年代
《隋书·经籍志》著录:“《孙子算经》二卷”,但不记作者姓名及写作年代。对此,自清代起就有种种不同的说法[218]。
(一)先秦成书说。清代,一些学者或因书名冠以“孙子”,就认为《孙子算经》产生于春秋时代,为军事家孙武所作。如朱彝尊在《曝书亭集》卷五十五《孙子算经》跋中云[219]:
《孙子算经》三卷,汉志不著于录,而隋唐《经籍志》有之。首言度量所起,合乎兵法。地生度、度生量,量生数之文。次言乘除之法,设为之数,十三篇中所云廓地、分利、委积、运输、贵买、兵役、分数比之九章:方田、粟米、差分、商功、均输、盈不足之目,往往相符,而要在得算多,多算胜,以是此编非伪托也。
然而,深入考察书中有关历史资料,皆与孙武所处时代相去甚远。
(二)汉、魏成书说。清戴震(1724-1777)据《孙子算经》卷下第33题“今有长安、洛阳相去九百里”;卷下第4题“今有佛书二十九章,章六十三字”,断定《孙子算经》成书于汉明帝(58-75)以后[220]。因为长安是汉初才有的地名,而佛书开始传入中国是汉明帝以后的事。
《孙子算经》卷下第5题:“今有棋局,方十九道。问用棋几何?答曰:三百六十一。”据此,阮元在《畴人传》中说:“韦曜《博奕论》枯棋三百注引邯郸淳《艺经》,谓棋局十七道,而孙子乃云棋局十九道,则其人当更在汉以后。”当代学者梁宗巨(1924-1995)认为,此说比较可信。且进一步指出,《夏侯阳算经·序》里说:“《五曹》《孙子》述作滋多,甄鸾、刘徽为之详释。”刘徽是3世纪人,所以《孙子》成书不会迟于3世纪,大概可以确定在公元67年至270年之间[221]。
(三)西晋成书说。钱宝琮(1892-1974)、严敦杰(1917-1988)等学者主张《孙子算经》成书于西晋。1929年,钱宝琮在论文《孙子算经考》中指出:“书中其他含有时代性之问题,无可证明为先秦作品者,本书非孙武子原著显而易见。余以张丘建为北魏时人。《孙子算经》原本在张丘建之前,或为晋人所作。《孙子兵法》十三篇,或疑为后人伪作,迄今尚无定论。但相传十三篇有曹操(155-220)注,在三国时当甚风行。晋代畴人撰算书,伪托孙子之名以传世,容或有之。其序言文辞骈丽,颇似六朝人手笔。”[222]1961年,钱宝琮在校点《算经十书·孙子算经提要》中,则改定《孙子算经》成书于公元400年前后,但未给出具体的理由。
严敦杰《孙子算经研究》一文,在阮元、钱宝琮论证的基础上,对算经内具有成书年代意义的内容作了详细地分析,从而论证了《孙子算经》成书于西晋。其立论的依据有三点。
其一,由棋局演变推断。他指出“邯郸淳事具见《三国志·王粲(177-217)传》注,淳尝官魏给事中”,以断《孙子》成书时代更后于魏;又据钱大昕(1728-1804)“尝见宋李逸民《忘忧清乐集》(棋谱也),首载孙策赐吕范,晋武帝赐王武子两局皆十九道。疑后人假托”,推测魏晋棋局有17、19道交互为用之时。
其二,由西晋户调法推断。晋武帝平吴(280)之后,所制户调之法中有“丁男之户,岁输绢三匹,绵三斤”,《孙子》卷下9问中“户输绵二斤八两”,与之相近,而东晋户调绵仅八两,北朝户调制无户输绵一条。
其三,由文献记载推断。李淳风注《九章·商功》28问:“晋武库中,有汉时王莽所作铜斛,其篆书字题云‘律嘉量斛’,方一尺而圜其外,庣旁九厘五毫,幂一百六十二寸,容十斗,及斛底云:律嘉量斗,合龠皆有文字,升居斛旁,合龠在斛隔耳上,后有赞文,与今《律历志》同,亦魏晋所常用”。《孙子》卷中10、11、12三问正以“斛法一尺六寸二分”入算。
此外,严敦杰还对算经中“佛书计字”“九家输租”等详作考证,以说明是书成于西晋。
(四)南北朝成书说:1982年,高振儒在《关于孙子算经编纂年代的考证》一文中提出,《孙子算经》成书于南北朝。高振儒的主要论据是围棋在晋以前只有17道,289路。到了南北朝才改为19道361路,从而断定成书上限为公元420年[223]。
综上所述,先秦成书说,确不成立;汉魏之说失之笼统,且刘徽是否注释过《孙子算经》史无凭证;西晋和南北朝之说均有其立论的依据。需要特别注意的是,尽管围棋在两晋时有从17道变为19道交叉使用的过渡时期,但书中言19而不取17,说明19道围棋已基本取代了17道,其时当为晋末。因此,在无进一步的证据之前,定《孙子算经》成书于晋末与南北朝之初是较为合理的。
《隋书》著录:“《孙子算经》二卷”;《一切经音义》著录:“《孙子算经》,甄鸾注”;《旧唐书》著录:“《孙子算经》三卷,甑氏撰注”;《新唐书》及《通志》均著录:“《孙子算经》三卷,甄鸾撰,李淳风注”。这些文献结合以上对《孙子算经》成书年代的分析,我们尚不能确定《孙子算经》的最初作者是谁。但可以肯定北周甄鸾对《孙子算经》作过整理和注释,使之成为李淳风《算经十书》之一,而广为流传。这也是北朝数学家对中国古代数学作出的贡献。
二、《孙子算经》内容概述
传本《孙子算经》[224]由序言和上、中、下三卷组成。序言富有哲理性,其开篇曰:
夫算者,天地之经纬,群生之元首,五常之本末,阴阳之父母,星辰之建号,三光之表里,五行之准平,四时之始终,万物之祖宗,六艺之纲纪。
这里,抽象出一个非常重要概念——“算”,是数、算筹、算术、算理等涉及数学问题的概括。“算者……万物之祖宗”,显然,这是中国古代的“算本体论”,而且延伸到日月星辰,扩展到社会的各个层面。这种观点,与古希腊毕达哥拉斯(Pythagoras,约前572—前497)学派的“数本说”具有相似之处。关于毕达哥拉斯学派“数本说”的实质,亚里士多德在《形而上学》一书中作了明确的说明[225]:“他们认为,研究数的原则是一切事物的原则,因此,数按其本性来说是第一性的。在他们看来,在数中要比火、土、水中更能看到一切存在和变化之物共同的东西,更能看出那种数是‘正义的’,那种数是精神、心灵,那种数是‘合时的’等等。同时,他们在数的和谐中,看到逻辑规律(特性),因为他们认为,一切别的事物的本性都是由数造成的,因为数是一切本体中是第一位的。”另外,毕达哥拉斯学派认为,数是事物的本原,即本体,并不是说数像原子那样组成物体,而是从量的方面把握事物的本质,认识到事物的多样性,可以归结到量的统一性,因而“数”是事物量的统一性的抽象原则,事物本身就是数。“算本体论”如同毕达哥拉斯学派的“数本说”,是从量的方面把握事物的本质,认识事物的多样性。中国古代的元气论认为,万物乃至天体、宇宙是由元气组成的,即所谓“道生一(元气),一生二(阴气、阳气),二生三,三生万物”。而事物的多样性(万物)则由“算”来把握,不同的物体,其“算”是不同的,在“算”中要比元气更能看到一切存在和变化之物:天地、群生、五常、阴阳、星辰、三光、五行、四时、万物、六艺,而且,在“算”中把握变化之物的逻辑规律或特性。
序言中,接着论述了“算”的具体应用:“稽群伦之聚散,考二气之降升,推寒暑之迭运,步远近之殊同;观天道精微之兆基,察地理纵横之长短;采神祇之所在,极成败之符验;穷道德之理,究性命之情。”简言之,人们的各种实践活动,都离不开“算”。当然,“序言”并未把“算”拘泥在纯应用性之中,而是从更高的角度,去揭示其发展的必然规律:“夫算者……历亿载而不朽,施八极而无疆”。这就是说,“算”将随人类社会的进步而发展,随人类认识的提高而更加广泛地应用。对人们能否认识和掌握“算”,序言更有真知灼见:
心开者幼冲而即悟,意闭者皓首而难精。夫欲学之者必务量而揆己,志在所专,如是则焉有不成者哉。
随着人类社会的发展,数学在各种文化中的地位、作用和主导性日益重要,这种重要性远非《孙子算经》序言所能完全揭示,但先哲们的思想,却体现了千百年来人类执着的追求和共同理想。
对于上、中、下三卷的内容,这里仅作一简单介绍。卷上详述度量衡制度、大数之法、筹算记数、筹算乘除法则与“九九算表”;卷中28问,举例说明筹算分数算法、筹算开平方法,以及简单的面积、体积计算问题;卷下36问,是市易、营建、仓窖、兽禽、赋役、测望、军旅等应用的计算问题。卷中、卷下总计64问,涉及乘除运算、比率算法、面积算法、体积算法、开方算法、相似勾股形、衰分、盈不足术、“方程”术等计算方法,基本涵盖了《九章算术》所廓定的古算范畴。其中,有些问题直接取自《九章算术》,例如:《孙子算经》卷中的1、2、3、4问,5、6、7、8问,27问分别取自于《九章算术》中的方田1、7、10、15题,粟米1、2、3、4题,衰分4题。
三、《孙子算经》对中国古代数学的贡献
《孙子算经》虽属普及数学教育的启蒙读物,但有些内容却在中国古代数学发展史上具有重要地位。
(一)提出度量衡最小单位
《汉书·律历志》刘歆条奏云:“度者、分、寸、尺、丈、引也……量者,龠、合、升、斗、斛也……权者,铢、两、斤、钧、石也。”这些都是度量衡较大的单位。而《孙子算经》卷上不仅给出了度量衡单位系统的进位制,而且给出了度量衡最小单位的计量标准:
度之所起,起于忽。欲知其忽,蚕吐丝为忽。十忽为一丝,十丝为一毫,十毫为一厘,十厘为一分,十分为一寸,十寸为一尺,十尺为一丈,十丈为一引,五十引为一端,四十尺为一匹。六尺为一步,二百四十步为一亩,三百步为一里。
秤之所起,起于黍。十黍为一絫,十絫为一铢;二十四铢为一两;十六两为一斤;三十斤为一钧;四钧为一石。
量之所起,起于粟。六粟为一圭;十圭为一撮;十撮为一抄;十抄为一勺;十勺为一合;十合为一升;十升为一斗;十斗为一斛。
上述文献提出了度量衡的最小单位分别是忽、黍、粟,而且给出其进位制度。其中黍、圭、絫等在《孙子算经》之前就已有之,如东汉许慎《说文解字》曰“絫,十黍之重也”;《后汉书律·历志上》曰“度长短者不失毫厘,量多少者不失圭撮,权轻重者不失黍絫”。而长度计量的最小单位“忽”,则是在《孙子算经》中第一次提出。传本《孙子算经》记为“十忽为一丝”,而《隋书》论审度引《孙子算经》曰:“十忽为一秒。”可能是宋代把秒改为丝。在当时像“忽”这样的小量无实用意义,但它的提出,标志着数量概念走向抽象化,具有重要科学史意义。
(二)算筹的记数方法
算筹,又称算策,是中国古代珠算盘出现之前,一种主要的十进制计算工具。算筹起源于商代的占卜。古代筹、策、算三字都带竹头,表示多用竹制成。策为束字加竹头,表示手握一束竖立的算策,作为占卜之用;筹可能代表周易八卦横向排列时用的阴、阳爻。算筹横竖二式,可能来源于此。[226]《老子·道德径》曰:“善算者不用筹策。”说明至迟在战国时期,我国已普遍使用算筹了。
周朝的算筹一般用木枝制成,汉代多用竹制作,有时亦用骨、象牙、玉石、铁等材料制作。算筹长一般在12厘米左右,直径为2至6毫米。最初的算筹的截面是圆形的,后来变成三角形、四方形。《汉书·律历志》曰[227]:
数者,一、十、百、千、万也,所以算数事物,顺性命之理也……其算法用竹。直径一分,长六寸;二百七十一枚而成六觚,为一握。
《隋书·律历志》曰[228]:
其算法用竹。广二分,长三寸。正策三廉(三角形),积二百一十六枚成六觚,乾之策也。负策四廉(四方形),积一百四十四枚,成方,坤之策也。
由前可知,汉代1尺=23.10厘米,隋开皇官尺1尺=29.49厘米。据此,西汉的算筹一般是直径为0.23厘米、长约13.86厘米的圆柱形竹棍。把二百七十一枚算筹捆成六角形的捆,为一“握”。隋朝算筹有两种:正策和负策,或称乾策和坤策,以区别正负之数。正策长8.85厘米,截面为正三角形,其边长约为0.59厘米。负策长8.85厘米,截面为四方形,其边长为0.59厘米。这表明从汉到隋,算筹从圆而方,由长变短,以便运用。刘徽注《九章算术》曰:“正算赤,负算黑,否则以邪(斜)正为异。”又《梦溪笔谈》卷八称:“算法用赤筹、黑筹,以别正负之数。”可见,早在三国之前,中算家便已用算筹颜色的赤、黑或形状的邪、正(三棱体和四棱体)来区分正、负数了。
自先秦以来,有关算筹的文献很多,但记载算筹记数方法,以及明确使用十进位值制的文献则始于《孙子算经》。其文曰:
凡算之法,先识其位,一纵十横,百立千僵,千十相望,百万相当。
《夏侯阳算经》对此补充了四句:
满六以上,五在上方,六不积算,五不单张。
明确了“以一当五”的规定:既不允许并排用6根筹记6,也不允许单独使用1根筹表示5。这样,纵、横两式筹码为:
(1)纵式(表示个位、百位、万位等)
(2)横式(表示十位、千位等)
例如,71824可表示为:遇到某位缺数,则不置算筹,形成空位,即以空位表示0。这样,交替地使用纵、横两式筹码,便可记出一切自然数。
(三)筹算的计算方法(www.xing528.com)
使用算筹进行计算,称为筹算。算筹一般布置在地面或桌子上面进行运算。清代数学家劳乃宣说:“盖古者席地而坐,布算于地,后世施于几案。”[229]日本古算书中有带方格子的算筹板图,见图3-2。
图3-2 带方格子的算筹板图
如何用算筹进行加减乘除运算,一般算经阙而不论。《孙子算经》卷上则对筹算乘法、除法有详细阐述,为考察古代筹算的计算方法提供了珍贵的文献资料。《孙子算经》关于筹算乘法的记载如下:
凡乘之法,重置其位。上下相观,上位有十步至十,有百步至百,有千步至千。以上命下,所得之数列中位。言十即过,不满自如。上位乘讫者,先去之。下位乘讫者,则俱退之。六不积,五不只。上下相乘,至尽而已。
据这一文献,筹算乘法可分以下几步:
第一步步算定位:先将被乘数、乘数在筹算板上排成两行,被乘数放在上行(上位),乘数放在下行(下位),乘数的个位,对齐被乘数的最高位(“上位有十步至十……”)。上下行之间,留空1行(中位),作中间积存放处。
第二步运算规则:从左至右运算;逢10进1(“言十即过,不满自如”)。
第三步运算步骤:从上位的最高位数起,依次去乘下位,初积入中位,随乘随并。
除了上述一般性法则之外,《孙子算经》还给出了一个具体的算例:
九九八十一自相乘,得几何?
答曰:六千五百六十一。
术曰:重置其位,以上八呼下八,八八六十四,即下六千四百于中位。以上八呼下一,一八如八,即于中位下八十。退下位一等,收上位八十。以上一呼下八,一八如八,即于中位下八十。以上一呼下一,一一如一,即于中位下一上下位俱收,中位即得六千五百六十一。
现按术文所述,作一解答(原用算筹所表示的数,改用阿拉伯数字代替),见图3-3。
图3-3 81×81演算步骤图
《孙子算经》中关于筹算除法的记载如下:
凡除之法,与乘正异。乘得在中央,除得在上方。假令六为法,百为实,以六除百,当进之二等,令在正百下,以六除一,则法多而实少,不可除,故当退就十位。以法除实,言一六而折百为四十,故可除。若实多法少,自当百之,不当复退。故或步法十者置于十位,百者置于百位。上位有空绝者,法退二位。余法皆如乘时。实有余者,以法命之,以法为母,实余为子。
“凡除之法,与乘正异”,即除法是乘法的逆运算。筹算除法,首先亦要“步算定位”,用算筹把商、实(被除数)、法(除数)依次分别排成上、中、下三行。正如《孙子算经》所云:“乘得在中央,除得在上方”。术文中以100÷6为例,说明筹算除法的运算规则,这里作一简要疏释,见图3-4。
图3-4 100÷6演算步骤图
概而言之,筹算的乘法、除法实质上也包括了筹算的加、减法。进行筹算的乘、除法运算时,其首要之点是“步算定位”。乘法时,“上位有十步至十,有百步至百,有千步至千”。然后,以一位数乘多位数;除法时,“步法十者置于十位,百者置于百位”。若法大实小,则退就下位,“余法皆如乘时”。同时,要熟悉“九九算表”,这是进行筹算乘、除法的基础。中国古算文献所载完整的“九九算表”,最早就见于《孙子算经》。
另外,术文中的“法”与“实”,是中国古代数学中的两个重要概念。在除法中,“实”是被除数,“法”是除数。然而,“法”与“实”的意义远非如此,开方算法中的被开方数,“方程”算法中的未知数系数皆称为“实”。“法”的含义则理解为“用法律固定的单位量度”。中算中常有“实如法而一”,即是“以法量实”,除法的意义正是由此引申而来。
(四)开方术的改进
中国古代的开方运算起源于长度的测算、或化积为方(包括已知正方形的面积求边长、已知立方体的体积求棱长),或化圆为方(包括已知圆面积求圆的直径、已知球的体积求球的直径),或勾股弦的互求等问题。这些问题的文字记载最早见于《九章算术》“少广”“勾股”两章。《九章算术》少广章中的“开方术”特指开平方运算,其第12题的术文介绍了“开方术”:
置积为实。借一算步之,超一等。议所得,以一乘所借一算为法,而以除。除已,倍法为定法。其复除,折法而下。复置借算步之如初,以复议一乘之,所得副,以加定法,以除。以所得副从定法。复除下折如前。若开之不尽者为不可开,当以面命之……
术文对“开方术”的介绍言简意赅,有语焉不详之处。刘徽在其注文中利用几何图形对这一方法给出了一个直观的解释,而《孙子算经》则在计算方法上作了新的改进。《孙子算经》的开方术,见之于卷中19、20两问,现以第19问为例:
今有积,二十三万四千五百六十七步。问:为方几何?
答曰:四百八十四步九百六十八分步之三百一十一。
术曰:置积二十三万四千五百六十七步为实,次借一算为下法,步之超一位至百而止。上商置四百于实之上,副置四万于实之下。下法之上,名为方法。命上商四百除实,除讫,倍方法,方法一退,下法再退。复置上商八十,以次前商,副置八百于方法之下。下法之上,名为廉法。方、廉各命上商八十,以除实,除讫,倍廉法上从方法。方法一退,下法再退。复置上商四,以次前,副置四于方法之下,下法之上,名曰隅法。方、廉、隅各命上商四,以除实。除讫,倍隅法从方法,上商得四百八十四,下法得九百六十八,不尽三百一十一,是为方四百八十四步九百六十八分步之三百一十一。
与《九章》的开方算法比较,《孙子算经》的开方算法更为缜密细致,连贯流畅。这一点得益于《孙子算经》在以下两点所作的创新[230]:
1.改“复置借算步之如初”,以“退位定位”求次商
《九章》的开方技术在“命上商除实”之后,都要将借算退回到初始位置,重新步位(“复置借算步之如初”),以求次商。而《孙子算经》则改进为“方法一退,下法再退”的“退位定位”法,使得算法衔接有序。
2.增记廉法、隅法,完善术语命名
《九章》开方术中“商”“实”“法”“借算”四列,《孙子算经》则改“法”为“方法”,改“借算”为“下法”,并增加“廉法”“隅法”,使得算法术语统一、规范。
《孙子算经》的开方算法,后为《夏侯阳算经》《张丘建算经》《五曹算经》《详解九章算法篡类》(杨辉)所沿用。宋元数学中著名的“增乘开方法”,也采用了《孙子算经》的“超位退位定位”方法。可以说,正是《孙子算经》对开方术所作的改进,为“增乘开方法”奠定了坚实的基础。
(五)“物不知数”与中国剩余定理
《孙子算经》卷下第26问即著名的“物不知数”问题,又称“孙子问题”。其问为:
今有物,不知其数。三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
答曰:“二十三”。
术曰:“三三数之剩二,置一百四十;五五数剩三,置六十三;七七数之剩二,置三十。并之,得二百三十三。以二百一十减之,即得。凡三三数之剩一,则置七十;五五数之剩一,则置二十一;七七数之剩一,则置十五。一百六以上,以一百五减之,即得。”
“物不知数”问题等价于解下列的一次同余式组:N≡2(mod 3)≡3(mod 5)≡2(mod 7)。答案是无穷多,其中最小正整数解是23。
术文的前半段,给出本题的解:N=70×2+21×3+15×2-105×2=23;而术文的后半段,给出一次同余式组的一般解法:三三数之,取数70,与余数相乘;五五数之,取数21,与余数相乘;七七数之,取数15,与余数相乘。将诸乘积相加,若其和大于105,就减去105若干次,即得最小答案。列成现代算式就是:
N=70×R1+21×R2+15×R3-105×P
式中,R1、R2、R3、分别是用3、5、7去除的余数,P为整数。
“物不知数”是后来驰名于世界的“大衍求一术”的起源,也是中国古代卓越的数学成就之一。英国著名学者李约瑟称它是“关于不定分析(一次同余式组)计算问题的一个最早的例子”[231]。
首载于《孙子算经》中的“物不知数”问题,与中国古代制定历法有密切关系。自汉代起,中国古历法就重视“上元积年”的推算。一部历法,需要规定一个起算时间。中国古代历算家把这个起点叫做“历元”或“上元”,并且把从历元到编历元所累积的时间叫做“上元积年”。推算上元积年要满足许多初始条件和利用庞杂的天文数据,这是相当复杂的。一般以各种天文周期(如回归年、朔望月等)和相应的差数来推算上元积年,则构成一个求解一次同余式组的问题。“物不知数”只不过是这类问题的简单反映。因此,引起了千余年来中算家对同余问题的兴趣,形成了中国古代不定分析研究的重要领域,而且算法名称很多,如鬼谷算、隔墙算、秦王暗点兵、翦管术、总分、物不知总、韩信点兵等。
求解“物不知数”的关键在于70、21、15和105这4个数。为了便于记忆和流传,古人将其编成各种歌决。如明代程大位(1533-1606)《算法统宗》卷五载《孙子歌》曰:
三人同行七十稀,五树梅花二一枝,七子团圆正半月,除百零五便得知。
此歌在民间广为流传,并传到日本,影响甚大。《孙子算经》中没有说明70、21、15和105这4个数的来历。直到1247年,南宋秦九韶(1202-1261)写成《数书九章》才解决了这一问题,其方法称为“大衍求一术”。
1801年,德国著名数学家高斯(K.F.Gauss,1777-1855)出版《算术探究》,对同余式组解法得出与秦九韶相同的结果。1852年,英国来华传教士伟烈亚力(Alexander Wylie,1815-1887)在《中国科学札记》中,首次向西方介绍了“物不知数”问题和秦九韶的有关工作。1874年,德国学者马蒂生(L.Martthiessen)在《数学与自然科学教育杂志》上发表文章,指出秦九韶解法和高斯解法基本一致,从而使中国古代数学中这一杰出的创造受到世界相关学者的瞩目。之后,西方数学论著中称这种一次同余式组的解法为中国剩余定理(Chinese Remainder Theorem)[232]。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。