秦九韶“大衍总数术”中问数化定数算法解析
2011-01-25侯钢
侯 钢
(天津师范大学 数学科学学院,天津 300387)
“大衍总数术”是我国南宋数学家秦九韶在其所著《数书九章》一书中系统论述的一种算法,其中所涉及的理论与现代初等数论中的一次同余方程组的理论相符。
初等数论中介绍的一次同余方程组的理论被称为“孙子定理”[1,2],可以表述如下:
设m1,m2,…,mk是k个两两互素的正整数
则同余方程组
的解是
其中Mi'满足MiMi'≡1(modmi),i=1,2,…,k。([1],62 页)
考察《数书九章》中“大衍”类九个问题的算草,知秦九韶解题过程与此定理蕴含的求解步骤大致相当,我们可以将“孙子定理”中的符号与“大衍总数术”中的术语对应起来(见表1)。
表1 “孙子定理”中的符号与“大衍总数术”中的术语的对应
《数书九章》“大衍”类的九个问题中,只有“余米推数”一题的模是两两互素的,其余八题的模都不满足这个条件。秦九韶将不两两互素的诸模称为问数,他在解题时首先就将问数化为定数①秦氏也称定数为定母。,即将不两两互素的模化为两两互素,然后再用与“孙子定理”相当的方法求解。
初等数论中还有如下的命题:
设m是正整数A1,A2,…,Ak的最小公倍数,即m=[A1,A2,…,Ak],那么一定可以找到一组正整数m1,m2,…,mk,满足:
(i)miAi,i=1,2,…,k,
(ii)m1,m2,…,mk两两互素,即(mi,mj)=1,i,j=1,2,…,k,i≠j,
并且如果同余方程组
有解②有解的充要条件是(Ai,Aj )(Ri-Rj), i,j=1,2,…,k,i≠j。([1],64 页;[2],175 页),则它的解与同余方程组的解相同。([2],175—176页)
依此结论,我们可以验证秦九韶解题方法正确。虽然定数须满足的三个条件在秦氏著作中没有明确记载,但如果按照“大衍总数术”术文正确计算的话,所得的定数均能满足那三个条件。
“大衍总数术”实际包括四个部分:其一是将问数化为定数,其二是求乘率(即“大衍求一术”),其三是用数的借补,其四是计算所求率数。本文讨论秦九韶将问数化为定数的方法。
1 问数化为定数的两条途径
“大衍总数术”中将问数化为定数的术文如下:[3,4]
大衍总数术曰:置诸问数类名有四。一曰元数谓尾位见单零者,本门揲蓍、酒息、斛粜、砌砖、失米之类是也。二曰收数谓尾位见分厘者,假令冬至三百六十五日二十五刻,欲与甲子六十日为一会而求积日之类。三曰通数谓诸数各有分子母者,本门问一会积年是也。四曰复数谓尾位见十或百及千以上者,本门筑堤并急足之类是也。
元数者,先以两两连环求等①等指等数,即两个数的最大公因数。四库馆臣称之为“连环等数”([4],362页)。,约奇弗约偶。或约得五而彼有十,乃约偶而弗约奇。或元数俱偶,约毕可存一位见偶。或皆约而犹有类数存,姑置之,俟与其他约遍而后乃与姑置者求等约之。或诸数皆不可尽类,则以诸元数命曰复数,以复数格入之。
收数者,乃命尾位分厘作单零,以进所问之数,定位讫,用元数格入之。或如意立数为母,收进分厘,以从所问,用通数格入之。
通数者,置问数,通分内子,互乘之,皆曰通数。求总等②总等指多个数的最大公因数。总等必是连环等数的因数。,不约一位约众位,得各元法数,用元数格入之。或诸母数繁,就分从省通之者,皆不用元,各母仍求总等,存一位约众位,亦各得元法数,亦用元数格入之。
复数者,问数尾位见十以上者。以诸数求总等,存一位约众位,始得元数。两两连环求等,约奇弗约偶复乘偶,或约偶弗③诸本皆作“或”,四库馆臣校正为“弗”([4],329页;[5],679页),今从。约奇复乘奇,皆续等下用之④四库馆臣以为此六字可省而删去([4],329 页;[5],679页),实误,今补回。。或彼此可约而犹有类数存者,又相减以求续等,以续等约彼则必复乘此,乃得定数。所有元数、收数、通数三格,皆有复乘求定之理,悉可入之。
求定数,勿使两位见偶,勿使见一太多。⑤这句话指出了问数化定数的两个限制条件。定数要两两互素,所以化得的两数不能都是偶数。另外,诸定数中也不要有太多的1,否则会导致“大衍总数术”的第三部分——用数的借补情况复杂而使计算量加大(这个问题将在另文讨论用数借补时述及)。以今之数学观点看来,前述命题中定数须满足的三个条件是相互关联的,如果定数中有太多的1,可能会使某个非1的mi是其相应Ai的倍数而不是因数。见一多,则借用繁;不欲借,则任得一。([3],444 页;[4],327—329 页)
由术文看出,秦九韶将问数分为四类:元数、收数、通数和复数。元数系指个位数字非零的正整数,“蓍卦发微”、“推库额钱”、“分粜推原”、“余米推数”及“积尺寻源”五题的问数属于此类;收数系指小数,通数系指分数,由于小数可以化为分数,所以收数、通数二类实为一类,“古历会积”一题的问数属于此类;复数系指个位数字为零的正整数(即为10的倍数),“程行计地”、“程行相及”和“推计土功”三题的问数属于此类。其中,收数和通数都要先化为元数,再用元数求等化约的办法去求定数。而复数实际上是特殊的元数,秦氏给出的复数格算法可以认为是将元数化为定数的又一种方法。
我们再来考察“大衍”类九题将问数化为定数的术文和草文中的算法,将其列如表2。
表2 “大衍”类九题算法分类、问数及求定数的术文和草文算法
从“大衍总数术”中将问数化为定数的术文和各题求定数的术、草可以知道,秦九韶化问数为定数有两条途径:一是将诸问数直接两两连环求等;一是将诸问数先求总等,存一(位)约众(位),然后再连环求等。而不论通过哪个途径来化约,连环求等时的根本原则是“约奇弗约偶”。
2 “约奇弗约偶”算法和其中“奇”、“偶”的意义
2.1 数学史研究者的多种解释
秦九韶通过连环求等求定数的根本算法是“约奇弗约偶”,对于其中“奇”、“偶”的意义和算法本身,数学史研究者已有多种解释。归纳起来,这些解释大抵可分为三类。
第一类解释仅说明“约奇弗约偶”是一种原则,并未给出实质性的分析。有三种解释可归入此类。
李俨先生在《大衍求一术的过去和未来》一文中说:“至于说约奇弗约偶,是欲约后无等。”([6],129 页)
钱宝琮先生在《秦九韶<数书九章>研究》一文中说:“一般说,奇数是单数,偶数是双数。但这所谓‘奇’、‘偶’是指两个不同的元数。”([7],71页)在《求一术源流考》一文中说:“约奇勿约偶,谓两数求得公因数后,只以公因数除其一数,不遍除也。其意与不约一位约众位同。”([8],25页)
李文林、袁向东两位先生又将此引申,认为“‘约奇勿约偶’给出了化约的原则,即每求出两数的公因子之后,用它去约简两数中的一个,另一个保持不变。到底约哪一个?一般是有条件的,就是要使约简后的数与未约简的数互素。”([9],116页)
第二类解释是将“奇”、“偶”认为是奇数、偶数。至于将定数还是等数视为奇数、偶数,约奇、约偶怎样约法,又有具体的不同。有七种解释可归入此类。
这类解释始于四库馆臣,倪廷梅在元数格按语中指出:“约奇弗约偶,专为等数为偶者言之;若等数为奇者,则约偶弗约奇;而等数为五与十者,又有或约奇或约偶者矣。”([4],328 页)
梅荣照先生发展了这种观点,认为“‘奇’就是含有单数个‘等’的‘元数’,‘偶’就是含有双数个‘等’的‘元数’。当‘等’为双数时,就用‘等’去约‘奇’,‘偶’不约;当‘等’为单数时,就用‘等’去约‘偶’,‘奇’不约。这样,约后两数均为一单一双,互素的可能就比较大。”([10],294 页)
钱克仁先生的解释与梅先生的解释大致相同。他说:“设A=ad,B=bd,d是A,B的‘等’。a为单数(双数)时,A称为‘奇’(‘偶’)。b为单数(双数)时,B称为‘奇’(‘偶’)。d本身或为奇,或为偶。……两个问数进行约化时,等数为偶数(双数)时,‘约奇弗约偶’;等数为奇数(单数)时,‘约偶弗约奇’。总的原则是使两个问数求等相约后,没有公因数。”([11],53页)
王翼勋先生在《秦九韶、时曰醇、黄宗宪的求定数方法》一文中讨论“奇”、“偶”的含义时认为:“奇、偶一般作为单、双解。秦九韶的‘两两连环求等,约奇弗约偶’中的‘奇’、‘偶’是除以‘等数’后所得商数的单、双称为‘奇’、‘偶’。”([12],308页)后来,在《清代学者对“大衍总数术”的探讨》一文中又明确为“奇偶一般作单双解。两数求等相约时,也根据除以等数后所得商数的单双,称两数为奇或为偶。两待约数可分一奇一偶时,优先约奇;遇有困难,再改约偶。”([13],320 页)
沈康身先生在解释秦九韶求定数的方法时认为“甲、乙两数的最大公约数如果是偶数,就约简这两个数中经约简后的商是奇数的那个数,其余一个保留不变。最大公约数如果是奇数,就约简这两个数中经约简后的商是偶数的那个数。”([14],53页)
王守义先生认为“奇”、“偶”是指元数的单、双,“约奇弗约偶”是指用两个元数的等数去约奇元数而不约偶元数。([15],10页)
王渝生先生认为“秦九韶的‘约奇弗约偶’不必考虑等数的单双,‘奇’‘偶’也并非是对元数的称谓。……‘约奇弗约偶’即是‘约得奇而弗约得偶’,‘奇’‘偶’是对约得数的称谓。”([16],301 页)
第三类解释认为在化约时元数的地位与作用不同,将“奇”、“偶”释为奇位与偶位,虽然表述不尽相同,但大意均是如此。有五种解释可归入此类。
李继闵先生认为元数两两连环求等时,“A1,A2,…,An要两两相见,不重不漏,需要规定一定的排列顺序。从大衍九问的演草可见,秦九韶把它分为(n-1)变来进行。一变:以An依次与An-1,An-2,…,A1,求等相约;二变:以An-1依次与An-2,An-3,…,A1,求等相约;……,k变:以An-k+1依次与An-k,An-k-1,…,A1,求等相约;……,n-1 变:A2与A1,求等相约。在每一变中,各元数Ai的地位不尽相同。例如,在k变中,An-k+1要与多个(n-k个)元数配对相约,而其它元数仅只与An-k+1配合相约一次;为了表示这种区别,秦九韶将k变中的元数An-k+1称之为‘偶’,而把其余的元数An-k,An-k-1,…,A1皆称之为‘奇’。所谓‘约奇弗约偶’,是说在k变中,一般是用等数去约处于‘奇’位的元数Aj(j<n-k+1),而不约处于‘偶位’的元数An-k+1。”([17],222页)在《秦九韶求定数算法“约‘奇’弗约‘偶’”辨析》一文中,李继闵先生又详细阐发了他的观点,称“元数A1,A2,…,An的排列顺序是任意的”,“诸元数两两互约要不重不漏,需要规定一定的组合顺序”,“通览秦氏原文,‘两两连环求等,约奇弗约偶’,是说在每一变中,两元数求等相约,一般是以等数去约奇位上的元数,而不约偶位上的元数。”([18],58—59页)
莫绍揆先生在《秦九韶大衍求一术的新研究》一文中将诸元数ai化为定数时,参考求诸ai最小公倍数的方法,认为将诸ai按其足码大小而定先后,则方法可以说是“两两连环求等,约后不约前”。具体讲就是“对每对ai,aj均求其等数(ai,aj),用这等数约aj(当j>i时)而不约ai(约后不约前),而且必须按下列次序求等:a1依次与a2,a3,…,an求等(一变);其次,a2依次与a3,a4,…,an求等(二变);再次,a3依次与a4,a5,…,an求等(三变);最后an-1与an求等(n-1变)。这种次序规定应包括在‘两两连环求等’这句话之内作为其固有内容。”([19],181页)这个方法中按足码的大小而定诸ai的先后,并且约后不约前,实质上考虑的也是诸元数的位置(或者说是地位),虽然没有“奇位”、“偶位”的说法,但是却分别将“奇”、“偶”赋予了“后位”、“前位”的意义。
李兆华先生在《秦九韶求定数法探讨》一文中明确提出“元数两两连环求等时,先取一个依次与其它每个相配。我们把取的一个称为‘偶’,而将与之相配的一个称为‘奇’,这样可与书中的术草相符。如果奇与偶有最大公约数d,以d约奇不约偶即所谓约奇弗约偶,类似地可以解释约偶弗约奇。”([20],79页)
沈康身先生对“先以两两连环求等,约奇弗约偶”这句术文又有与前不同的解释:“我们理解奇为其余,偶为隅,那么后者是说:以d1约其余的mi①诸 mi为元数,(mi,mn)=d1,i=1,2,…,n-1。,例如而不约取定在一旁(隅)的mn。”([21],342 页)
孔国平先生认为,“秦九韶把元数分为奇偶,目的是确定化约的顺序。在《数书九章》中,秦九韶或假定最下一数为偶,上面各数为奇;或假定最上一数为偶,下面各数为奇,概无例外。”([22],22 页)。
2.2 与大衍筮法中的“奇”、“偶”的关联
我们现在所能了解的最早的占筮方法,记载于《周易·系辞》中:
大衍之数五十,其用四十有九。分而为二以象两,挂一以象三,揲之以四以象四时,归奇于扐以象闰。五岁再闰,故再扐而后挂。天数五,地数五,五位相得而各有合。天数二十有五,地数三十,凡天地之数五十有五。此所以成变化而行鬼神也。乾之策二百一十有六,坤之策百四十有四,凡三百有六十,当期之日。二篇之策,万有一千五百二十,当万物之数也。是故四营而成易,十有八变而成卦。([23],260页)
南宋时朱熹和蔡元定在《易学启蒙》中对占筮程序作了详细的阐释,使其成了为后来多数筮家所采用的筮法定式。
“分而为二以象两,挂一以象三,揲之以四以象四时,归奇于扐以象闰。五岁再闰,故再扐而后挂。”这句话指示了筮法的大略。朱、蔡的解释如下:
挂者,悬于小指之间。揲者,以大指食指间而别之。奇谓余数。扐者,扐于中三指之两间也。蓍凡四十有九,信手中分,各置一手,以象两仪。而挂右手一策于左手小指之间,以象三才。遂以四揲左手之策,以象四时。而归其余数于左手第四指间,以象闰。又以四揲右手之策,而再归其余数于左手第三指间,以象再闰。五岁之象:挂一,一也;揲左,二也;扐左,三也;揲右,四也;扐右,五也。是谓一变,其挂扐之数不五即九。得五者三,所谓奇也。五除挂一即四,以四约之为一,故为奇,即两仪之阳数也。得九者一,所谓耦②耦,通“偶”。也。九除挂一即八,以四约之为二,故为耦,即两仪之阴数也。([24],493页)
从这段文字中关于“奇”、“偶”的解释可以看出,筮法中以奇数为阳,偶数为阴,而阴、阳的确定要考虑“揲之以四”这个“4”的个数:含有一个4的数为“奇”,含有两个4的数为“偶”,这里的“奇”、“偶”由4的个数决定。
秦九韶在用“蓍卦发微”一题阐释“大衍总数术”时,在术文中是借助“阴阳象数图”(图1)以3的倍数确定爻的阴阳老少:
图1 阴阳象数图
《易》以三才为衍法,以法除实,所得为象数。如实有余,或一或二,皆命作一,同为象数。其象数得一为老阳,得二为少阴,得三为少阳,得四为老阴。得老阳画重爻,得少阴画拆爻,得少阳画单爻,得老阴画交爻。凡六画乃成卦。([3],445页;[4],332页)
秦九韶将49根蓍草分二、揲左,得挂、扐数后各与用数相乘,然后相加得总数,再累减衍母12,得到余数,则余数必是1至12间的整数。将余数除以3,商数必大于0且不大于4。秦氏将大于i-1且不大于i(i=1,2,3,4)的商数皆记作i,再由“阴阳象数图”,根据i的数值确定爻的种类。
我们只要抓住秦九韶“蓍卦发微”的思路,并以古代占筮家的立场来看待“奇”、“偶”,笼罩在这一问题上的迷雾就会豁然散去。参考前人涉及第二类解释的研究,并在逐题细致验算的基础上,我们确信,“约奇弗约偶”中的“奇”、“偶”系指等数的个数的单、双,而非指元数的单、双。“约奇弗约偶”就是在两个元数化约时,约含有奇数个等数的元数而不约含有偶数个等数的元数,化约时并不考虑元数本身的单双和等数本身的单双。
3 “约奇弗约偶”算法解析
在《数书九章》“大衍”类九题中,“余米推数”题的模两两互素,“蓍卦发微”题的模特殊,“推库额钱”题的算草中没有求定数的过程,“分粜推原”题求定数的过程比较简单,“古历会积”题题问不合、术草俱误,“积尺寻源”题算草详细、易于理解。因而,我们选择秦氏归入复数格算法的“推计土功”、“程行计地”和“程行相及”三题为例,详细分析“约奇弗约偶”算法。
3.1 “推计土功”题求定数算法详释
依照原题,记甲=54,乙=57,丙=75,丁=72。该题求定数算草如下:
甲得五十四丈、乙得五十七丈、丙得七十五丈、丁得七十二丈,各为四县众夫每日筑长率。按大衍术,命曰复数,列右行。以复数求总等,得三寸,以约三位多者,不约其少者,甲得五十四、乙得一十九、丙得二十五、丁得二十四,仍为元数。次以两两连环求等,各约之。先以丁丙求等,又以丁乙求等,皆得一,不约。次以丁甲求等,得六,只约甲五十四,得九,不约丁。次以丙与乙求等,又以丙与甲九求等,皆得一,不约。后以乙与甲九求等,得一,不约。复验,甲九与丁二十四犹可再约,又求等,得三,以约丁二十四,得八,复甲为二十七。([3],452页;[4],356-357页)
算草显示了秦氏的计算过程。
先求四个问数的总等,有(甲,乙,丙,丁)=(54,57,75,72)=3。由于甲 =54=3 ×18,乙 =57=3×19,丙 =75=3×25,丁 =72=3×24,可见甲含有等数的个数最少,“不约一位约众位”,即“约三位多者,不约其少者”,故不约甲,而约乙、丙、丁三数,得甲=54,乙=19,丙=25,丁=24,为诸元数。将它们两两连环求等。
一变①这是表示揲蓍步骤的术语,秦九韶在“积尺寻源”题的算草中已经借用来表示求等化约的步骤,此处模仿秦氏的用法。下同。:丁与诸数遍约。
(丁,丙)=(24,25)=1,不约。
(丁,乙)=(24,19)=1,不约。
(丁,甲)=(24,54)=(6 ×4,6 ×9)=6,约奇弗约偶,将甲约为9。
一变后,甲 =9,乙 =19,丙 =25,丁 =24。
二变:丙与诸数遍约。
(丙,乙)=(25,19)=1,不约。
(丙,甲)=(25,9)=1,不约。
三变:乙与诸数遍约。
(乙,甲)=(19,9)=1,不约。
三变以后,甲 =9,乙 =19,丙 =25,丁 =24。
四变:甲与诸数遍约。
(甲,丁)=(9,24)=(3×3,3 ×8)=3,约偶弗约奇复乘奇,则约丁得8,变甲为9 ×3=27,则有(甲,丁)=(27,8)=1。
此时,甲 =27,乙 =19,丙 =25,丁 =8,成为定数。
秦九韶在甲、丁两数有续等时为什么约丁复乘甲呢?我们详细分析其求定数算法,顺便对这种处理方法给出解释。
3.1.1 将诸问数直接两两连环求等
Ⅰ.由甲开始化约。
(甲,乙)=(54,57)=(3 ×18,3 ×19)=3,约奇弗约偶,约乙为19。
(甲,丙)=(54,75)=(3 ×18,3 ×25)=3,约奇弗约偶,约丙为25。
(甲,丁)=(54,72)=(18×3,18×4)=18,此时不论怎样化约,得到的两数都不互素:若约奇弗约偶,约甲为3,有(3,72)=3;若约偶弗约奇,约丁为4,有(54,4)=2。这就是有续等的情形。按照复数格算法,此时要“以续等约彼则必复乘此,乃得定数”。于是有两种解决办法:
(1)(甲,丁)=(3,72)=(3 ×1,3 ×24)=3,约丁为24,则甲须乘续等3,于是丁 =24,甲 =9。此时,(甲,丁)=(9,24)=(3 ×3,3 ×8)=3,表明甲、丁两数仍有续等。
若约奇弗约偶复乘偶,即约甲为3,变丁为24×3=72,这又回到了初有续等时的情形;若约偶弗约奇复乘奇,即约丁为8,变甲为9×3=27,这样处理后有(27,8)=1。此时,甲 =27,乙 =19,丙 =25,丁 =8,成为定数。
(2)(甲,丁)=(54,4)=(2 ×27,2 ×2)=2,若约奇弗约偶复乘偶,则约甲为27,且丁须乘续等2,于是得甲=27,丁=4×2=8,这样处理后有(27,8)=1。此时,甲=27,乙 =19,丙 =25,丁 =8,成为定数。
Ⅱ.由乙开始化约。一变,乙与诸数遍约。
(乙,甲)=(57,54)=(3 ×19,3 ×18)=3,约奇弗约偶,约乙为19。
(乙,丙)=(19,75)=1,不约。
(乙,丁)=(19,72)=1,不约。
一变讫,甲 =54,乙 =19,丙 =75,丁 =72。
二变,丙与诸数遍约。
(丙,甲)=(75,54)=(3 ×25,3 ×18)=3,约奇弗约偶,约丙为25。
(丙,丁)=(25,72)=1,不约。二变讫,甲 =54,乙 =19,丙 =25,丁 =72。三变,丁与诸数遍约。
(丁,甲)=(72,54),此即方法Ⅰ中(甲,丁)=(54,72)的情形。Ⅲ.由丙开始化约。一变,丙遍约诸数。
(丙,甲)=(75,54)=(3 ×25,3 ×18)=3,约奇弗约偶,约丙为25。
(丙,乙)=(25,57)=1,不约。
(丙,丁)=(25,72)=1,不约。
一变讫,甲 =54,乙 =57,丙 =25,丁 =72。
二变,丁遍约诸数。
(丁,乙)=(72,57)=(3 ×24,3 ×19)=3,约奇弗约偶,约乙为19。
(丁,甲)=(72,54),此即方法Ⅰ中(甲,丁)=(54,72)的情形。Ⅳ.由丁开始化约。一变,丁遍约诸数。
(丁,丙)=(72,75)=(3 ×24,3 ×25)=3,约奇弗约偶,约丙为25。
(丁,乙)=(72,57)=(3 ×24,3 ×19)=3,约奇弗约偶,约乙为19。
(丁,甲)=(72,54),此即方法Ⅰ中(甲,丁)=(54,72)的情形。
3.1.2 将诸问数先求总等,存一位约众位,再连环求等
Ⅰ.存丁,约甲、乙、丙三数。然后对甲=18,乙=19,丙=25,丁=72四数两两连环求等。
(丁,丙)=(72,25)=1,不约。
(丁,乙)=(72,19)=1,不约。
(丁,甲)=(72,18)=(18 ×4,18 ×1)=18,约奇弗约偶,约甲为 1,则有甲 =1,乙 =19,丙=25,丁=72。虽然此四数两两互素,但它们是由数组{18,19,25,72}化约得到的定数,并不是原题中诸问数的定数,所以必须将总等回乘①“回乘”这个步骤在秦氏诸题的算草中并未出现过,我们这样做是要保证在求等化约的过程中最小公倍数保持不变。为此目的,只能用总等回乘约过的众位,而存的那一位便不能再乘。这与有续等时“约彼则必复乘此”的道理相同。关于“复乘”的算理分析详见[18]。,再次化约,才能求得原问数组的定数。将甲、乙、丙三数均乘以总等3后,得到甲=3,乙=57,丙=75,丁=72,将它们两两连环求等。不妨由甲开始化约。
(甲,乙)=(3,57)=(3 ×1,3 ×19)=3,勿使见一太多,约乙为19。
(甲,丙)=(3,75)=(3 ×1,3 ×25)=3,勿使见一太多,约丙为25。
(甲,丁)=(3,72),此即3.1.1中方法Ⅰ的情形(1)。
Ⅱ.存丙,约甲、乙、丁三数。然后对甲=18,乙=19,丙=75,丁=24四数两两连环求等。
一变,丙遍约诸数。
(丙,甲)=(75,18)=(3 ×25,3 ×6)=3,约奇弗约偶,约丙为25。
(丙,乙)=(25,19)=1,不约。
(丙,丁)=(25,24)=1,不约。
一变讫,甲 =18,乙 =19,丙 =25,丁 =24。
二变,丁遍约诸数。
(丁,丙)=(24,25)=1,不约。
(丁,乙)=(24,19)=1,不约。
(丁,甲)=(24,18)=(6 ×4,6 ×3)=6,约奇弗约偶,约甲为3。
二变讫,甲=3,乙=19,丙=25,丁=24。甲、丁有续等,要再次化约。
(丁,甲)=(24,3)=(3×8,3×1)=3,约偶弗约奇复乘奇,约丁为8,变甲为3×3=9。
此时,甲 =9,乙 =19,丙 =25,丁 =8。四数虽两两互素,但它们只是数组{18,19,75,24}的定数,而不是原问数组的定数,所以必须将总等回乘,再次化约。将甲、乙、丁三数均乘以总等3后,得到甲=27,乙=57,丙=25,丁=24。两两连环求等,不妨由甲开始化约。
(甲,乙)=(27,57)=(3 ×9,3 ×19)=3,为约后无等,约乙为19。
(甲,丁)=(27,24)=(3×9,3×8)=3,约奇弗约偶,约得五而彼有十,乃约偶弗约奇,故约丁为8。此时,甲=27,乙=19,丙=25,丁=8。四数两两互素,成为定数。
Ⅲ.存乙,约甲、丙、丁三数。然后对甲=18,乙=57,丙=25,丁=24四数两两连环求等。
一变,丁遍约诸数。
(丁,丙)=(24,25)=1,不约。
(丁,乙)=(24,57)=(3 ×8,3 ×19)=3,约奇弗约偶,约乙为19。
(丁,甲)=(24,18)=(6 ×4,6 ×3)=6,约奇弗约偶,约甲为3。
一变讫,甲=3,乙=19,丙=25,丁=24。甲、丁有续等,问题转化为“存丙”时“二变”后的情形。
3.2 “程行相及”与“程行计地”两题秦氏失误原因分析
3.2.1 “程行相及”题求定数算法错误分析及改正
该题求定数算草如下:
次列甲、乙、丙三名日行,求总等,得五十。先约甲、丙,存乙,得甲六、乙二百五十、丙四。以甲六、丙四求等,得二。以二约甲为三,复以二因丙为八。次将乙二百五十与丙八相约,得二,乃约乙为一百二十五,复以二因丙为十六。定得甲三、乙一百二十五、丙十六为定母。([3],460页;[4],363页)
记A1=甲 =300,A2=乙 =250,A3=丙 =200。依草文,先求总等,有(A1,A2,A3)=(50 ×6,50 ×5,50 ×4)=50。存乙,约甲、丙,有A1=6,A3=4。将丙与甲、乙分别求等。
(A3,A1)=(4,6)=(2 ×2,2 ×3)=2,约奇弗约偶复乘偶,得A1=3,A3=4 ×2=8。
(A3,A2)=(8,250)=(2 ×4,2 ×125)=2,约奇弗约偶复乘偶,得A2=125,A3=8 ×2=16。
此时,A1=3,A2=125,A3=16。秦氏认为它们成为了定数。虽然此三数两两互素,但是它们的乘积为3×125×16=6000,而甲乙丙三数的最小公倍数为[300,250,200]=3000,且此时A3=16不能整除原问数200,由此知秦九韶得到的结果错误。造成错误的原因是什么呢?考察秦氏的算草,他在求等的两数没有续等的情况下就使用了“约彼则必复乘此”的办法,这是致误原因的唯一解释,也是“大衍总数术”术文中“皆续等下用之”六字必不可少的理由。
我们将解法改正如下:
一变,丙遍约诸数。
(A3,A1)=(4,6)=(2 ×2,2 ×3)=2,约奇弗约偶,约得A1=3。
(A3,A2)=(4,250)=(2 ×2,2 ×125)=2,约奇弗约偶,约得A2=125。
一变讫,A1=3,A2=125,A3=4。虽然此三数两两互素,但它们不是题中原问数的定数,所以必须将总等回乘,再次化约。将甲、丙两数均乘以总等50后,得到A1=3×50=150,A2=125,A3=4×50=200。两两连环求等,不妨由甲开始化约。
(A1,A2)=(150,125)=(25 ×6,25 ×5)=25,约奇弗约偶,约得五而彼有十,乃约偶弗约奇,故约得A1=6。
(A1,A3)=(6,200)=(2 ×3,2 ×100)=2,约奇弗约偶,约得A1=3。
二变讫,A1=3,A2=125,A3=200。
三变,乙与诸数遍约。
(A2,A3)=(125,200)=(25 ×5,25 ×8)=25,约奇弗约偶,约得A2=5。此时两数有续等,需要继续化约,要“以续等约彼则必复乘此”,于是有
(A2,A3)=(5,200)=(5 ×1,5 ×40)=5,约偶弗约奇复乘奇,得到A3=40,A2=5 ×5=25。
(A2,A3)=(25,40)=(5 ×5,5 ×8)=5,约偶弗约奇复乘奇,得到A3=8,A2=25 ×5=125。
此时,A1=3,A2=125,A3=8。三数两两互素,成为定数。
此题在乙、丙两数求等时也可以这样进行:
(A2,A3)=(125,200)=(25 ×5,25 ×8)=25,约奇弗约偶,约得五而彼有十,乃约偶弗约奇,约得A3=8,则A1=3,A2=125,A3=8,成为定数。
3.2.2 “程行计地”题求定数过程失误分析
该题求定数算草如下:
置甲三百里、乙二百四十里、丙一百八十里,先求总等,得六十。只存甲三百勿约,乃约乙二百四十,得四。次约丙一百八十,得三。各为元数,连环求等。先以丙乙求等,得一,不约。次以丙甲求等,得三。于术约奇不约偶。盖以等三约三,因得一为奇,虑无衍数,乃便径先约甲三百为一百。复以等三乘丙三,为九。既丙九为奇,甲百为偶,此即是约奇弗约偶。次以乙四与甲百求等,得四。以四约一百,得二十五,为甲;复以四乘乙四得一十六,为乙;各为定母。([3],458页;[4],360—361页)
记甲=300,乙=240,丙=180。依草文,先求总等,有(甲,乙,丙)=60。存甲,约乙、丙,有甲=300,约得乙=4,丙=3。将丙与乙、甲分别求等。
(丙,乙)=(3,4)=1,不约。
(丙,甲)=(3,300)=(3 ×1,3 ×100)=3,约偶复乘奇,约甲为100,丙乘3 为9。
再将乙与甲求等。
(乙,甲)=(4,100)=(4 ×1,4 ×25)=4,勿使见一太多,约甲复乘乙,约甲为 25,乙乘4为16。
此时,甲=25,乙=16,丙=9。秦九韶认为此三数就是定数。
通过验算发现化约后得到的甲=25,乙=16,丙=9三数满足前述定理中的三个条件,确实成为了定数。我们刚刚借助“程行相及”题表明了只有在求等的两数有续等的情况下才能使用“约彼则必复乘此”的办法,可是本题在丙与甲、乙与甲化约时并没有续等就使用了这个办法,也求得了正确的定数,这又是为什么呢?难道我们刚刚得出的结论有问题吗?仔细观察本题的三个问数,这一困惑便可迎刃而解。
此题三数的总等是(甲,乙,丙)=(300,240,180)=(60 ×5,60 ×4,60 ×3)=60。而由此式又可看出(甲,乙)=60,(甲,丙)=60,(乙,丙)=60,表明本题诸问数的总等与所有的连环等数都相等。按照草文,先求总等,存甲、约乙和丙,表面上看起来是用总等60分别去约乙240,丙180,得到乙=4,丙=3。而实际上这个“存一约众”的过程等同于完成了下述连环求等的化约操作①不论是“约奇弗约偶”还是“约偶弗约奇”,化约后的两数都不互素,所以此处怎样化约就无关紧要了。:
(甲,乙)=(300,240)=(60 ×5,60 ×4)=60,约乙为4。
(甲,丙)=(300,180)=(60 ×5,60 ×3)=60,约丙为3。
这两种化约过程之所以能够等同,就是因为本题诸问数的总等等于所有的连环等数。可是化约之后,(甲,乙)=(300,4)=4,(甲,丙)=(300,3)=3,表明甲与乙、甲与丙都尚有等数。这样一来,“存一约众”后再将丙与甲、乙与甲分别求等,就属有续等的情形了,秦氏这时候使用“约彼则必复乘此”的办法就是理所当然的了。正是本题诸问数的总等等于所有的连环等数这个事实成就了秦九韶的“歪打正着”。
4结语
以今天的数学观点看来,秦九韶“大衍总数术”中的问数化定数部分给出了将有解的同余方程组的诸不两两互素的模化为两两互素的方法,因而将这个算法施用于无解的同余方程组的模是没有什么意义的。对于任意给出的一组正整数(不是同余方程组的模),利用“大衍总数术”中的问数化定数算法一定可以求出这组数的最小公倍数。
秦九韶化问数为定数有两条途径:一是将诸问数直接两两连环求等;一是将诸问数先求总等,存一(位)约众(位),然后再连环求等。不论通过哪个途径来化约,连环求等时的根本原则是“约奇弗约偶”。其中的“奇”、“偶”系指等数的个数的单、双,而非指元数的单、双。“约奇弗约偶”就是在两个元数化约时,约含有奇数个等数的元数而不约含有偶数个等数的元数,化约时并不考虑元数本身的单双和等数本身的单双。特别地,按照“约奇弗约偶”的原则化约后,如果得到的两数不互素,就可以改用“约偶弗约奇”的原则去化约,目的是使约后的两数互素。秦氏所说的“或约得五而彼有十,乃约偶而弗约奇”,指的就是这种情形。当不论采用“约奇弗约偶”还是“约偶弗约奇”的原则进行化约后得到的两数仍不互素,那就先将约后的数搁置在一边,用没约的那个数与其余各数遍约之后,再与搁置的数再次求等化约。这即是秦氏所说的有续等的情况,此时就要用“复乘求定之理”“以续等约彼则必复乘此”——约奇弗约偶(或约偶弗约奇)后,要用等数乘不约的数。这样操作之后如果两数仍不互素,则要重复求续等、以续等约彼乘此的步骤,直至诸数两两互素,成为定数。
不论是直接两两连环求等,还是先求总等、存一(位)约众(位)、再连环求等,诸问数的地位是相同的,它们的排列顺序以及求等化约的先后次序不会影响计算结果的正确性。存哪个问数、或者从哪个问数开始化约,这都是任意的,不需要什么原则或规定。两种求定数的途径有异曲同工之妙,得殊途同归之效。秦九韶的算法具有一般性,是一个通法。
致 谢本文由作者博士学位论文中的两节修改而成,感谢导师刘钝研究员的悉心指导。李兆华教授对本文初稿提出有益建议,郭金海博士帮助复印资料,作者在此表示谢意。作者还要感谢论文评审人的建议及帮助。
1 闵嗣鹤,严士健.初等数论[M].第2版.北京:高等教育出版社,1982.
2 潘承洞,潘承彪.初等数论[M].北京:北京大学出版社,1992.
3 (宋)秦九韶.数书九章[A].宜稼堂本.郭书春(主编).中国科学技术典籍通汇·数学卷[M].卷1.郑州:河南教育出版社,1993.
4 (宋)秦九韶.数学九章[A].影印文渊阁四库全书[Z].第797册.台湾:商务印书馆,1983.
5 (清)宋景昌.数书九章札记[A].宜稼堂本.靖玉树(编勘).中国历代算学集成[M].卷上.济南:山东人民出版社,1994.
6 李俨.大衍求一术的过去和未来[A].李俨.中算史论丛[C].第1集.北京:科学出版社,1954.122—174.
7 钱宝琮.秦九韶《数书九章》研究[A].钱宝琮(主编).宋元数学史论文集[C].北京:科学出版社,1966.60—103.
8 钱宝琮.求一术源流考[A].钱宝琮.钱宝琮科学史论文选集[C].北京:科学出版社,1983.22—36.
9 李文林,袁向东.中国古代不定分析若干问题探讨[A].科技史文集[C].第8辑.上海:上海科学技术出版社,1982.106—122.
10 梅荣照.秦九韶是如何得出求定数方法的[J].自然科学史研究,1987,6(4):293—298.
11 钱克仁.秦九韶大衍求一术中的求定数问题[A].杜石然(主编).第三届国际中国科学史讨论会论文集[C].北京:科学出版社,1990.52—56.
12 王翼勋.秦九韶、时曰醇、黄宗宪的求定数方法[J].自然科学史研究,1987,6(4):308—313.
13 王翼勋.清代学者对“大衍总数术”的探讨[A].梅荣照(主编).明清数学史论文集[C].南京:江苏教育出版社,1990.317—333.
14 沈康身.中算导论[M].上海:上海教育出版社,1986.
15 王守义.数书九章新释[M].合肥:安徽科学技术出版社,1992.
16 王渝生.秦九韶求“定数”方法的成就和缺陷[J].自然科学史研究,1987,6(4):299—307.
17 李继闵.关于“大衍总数术”中求定数算法的探讨[A].吴文俊(主编).秦九韶与《数书九章》[C].北京:北京师范大学出版社,1987.220—234.
18 李继闵.秦九韶求定数算法“约‘奇’弗约‘偶’”辨析[A].吴文俊(主编).中国数学史论文集(四)[C].济南:山东教育出版社,1996.54—67.
19 莫绍揆.秦九韶大衍求一术的新研究[A].吴文俊(主编).秦九韶与《数书九章》[C].北京:北京师范大学出版社,1987.180—202.
20 李兆华.秦九韶求定数法探讨[J].陕西师大学报,1988,16(3):78—83.
21 吴文俊(主编).中国数学史大系[Z].第5卷(沈康身主编).北京:北京师范大学出版社,2000.
22 孔国平.大衍术——《数书九章》中的一次同余方程理论[J].北京师范学院学报(自然科学版),1988,9(2):20—25.
23 (魏)王弼,(晋)韩康伯.周易注·系辞上[M].卷7.四库全书本.
24 (宋)朱熹.易学启蒙[A].明蓍策第三.(清)李光地.周易折中[Z].卷20.四库全书本.