首页 理论教育 从物不知数到大衍术

从物不知数到大衍术

时间:2022-02-12 理论教育 版权反馈
【摘要】:有些问题经后来的数学书辗转援引,得到了广泛的流传。它是3、5、7三个两两互素数的最小公倍数。当我们认真分析《孙子算经》对物不知数问题的漂亮解答时,我们还可以注意到它所提供的数学上很有用的原则和方法。首先,我们可以把物不知数问题看做是求解如下的不定方程问题:寻找正整数N,满足N=3a+2=5b+3=7c+2。进而可得到满足物不知数问题的一个特解:N=70×2+21×3+15×2。

“物不知数”问题出自《算经十书》之一的《孙子算经》。

《孙子算经》一书,作者不详。编写年代也没有确切的记载,据考证大约成书于4~5世纪。现在传本的《孙子算经》共三卷,卷上叙述算筹记数的纵横布列法(在第二编中我们已做过介绍)和筹算乘除法则。卷中举例说明筹算分数算法和筹算开平方法。在《孙子算经》之前,我国已经用算筹进行计算,然而对算筹的记数法和筹算法却没有记载。《孙子算经》这一卷所作的详细阐述,成为中国古算书中仅见的宝贵史料,为后人研究古代筹算提供了主要依据。卷下是各种应用问题,内容涉及交易、仓库、田亩等各类实用问题。这书基本上是一部启蒙算书,以其浅显易懂而广为人知。其题目特色是通俗有趣,解法巧妙简便,在我国古代数学教育的启蒙读物中,是很有代表性的一种。有些问题经后来的数学书辗转援引,得到了广泛的流传。其中广为人知的“鸡兔同笼问题”即出自此书卷下第31题,此题后来传到日本,变成鹤龟算。另一广为流传的问题则是“物不知数”

问题。这一问题也是《孙子算经》中最有价值的内容。

数学史上有名的“物不知数”问题出自《孙子算经》卷下第26题。

原题是:“今有物,不知其数。三、三数之,剩二;五、五数之,剩三;七、七数之,剩二。问物几何”。“答曰:二十三。”意思是说:这里有一堆东西,不知道有几个。三个三个去数它们,剩余两个;五个五个去数它们,剩余三个;七个七个去数它们,剩余两个。问这堆东西有几个。简单表述这一问题就是:有一个数,用3除余2,5除余3,7除余2。求这个数。书中给出的答案是:23。

因为原题的数据比较简单,这个答案即便通过试算也可以得到。但《孙子算经》并没有这样做,而是给出如下的术文“术曰:三三数之剩二,置一百四十;五五数之剩三,置六十三;七七数之剩二,置三十。并之得二百三十三,以二百一十减之,即得。凡三三数之剩一则置七十,五五数之剩一则置二十一,七七数之剩一则置十五。一百六以上,以一百五减之,即得。”

《孙子算经》书影

本题术文分两段,前半段给出了本题的解法。用数学式子表示即:

2×70+3×21+2×15-105×2=23。所得数是最小的正整数解。

我们对这一解答做一下剖析。解法中出现的(2、3、2)是题目中已知的余数,对此用不着多说。105的来源也容易说明。它是3、5、7三个两两互素数的最小公倍数。显然,如果某个数满足题目的条件,那么这个数减去105也一定满足题目的条件。一般地,减去105的某个整数倍也一定满足题目的条件。进而,如果选取105的适当倍数,还可以得到满足条件的最小正整数。就像本题,在找到233这个解后,减去105的2倍,就可以得到问题的最小正整数解23。因此,术文中需要解释的关键之处是70、21、15的由来。对此,我们先看一下这三个数具有的特性。不难注意到,70是5和7的公倍数,且除以3余1;21是3和7的公倍数,且除以5余1;15是3和5的公倍数,且除以7余1。

因为70、21、15具有这种特性,于是式子2×70+3×21+2×15就具有特征:它除以3时,只有第一项不能除尽,而恰好这一不能除尽的部分中70除以3余1,因此2×70(进而整个式子2×70+3×21+2×15)除以3余2。同样的道理,当它除以5时,只有第二项不能除尽,而恰好不能除尽的部分中21除以5余1,因此3×21(进而整个式子2×70+3×21+2×15)除以5余数为3;当它除以7时,只有第三项不能除尽,而恰好不能除尽的部分中15除以7余1,因此2×15(进而整个式子2×70+3×21+2×15)除以7余数为2。由此,整个式子2×70+3×21+2×15满足:用3除余2,5除余3,7除余2的已知条件。最后,考虑到105=3×5×7可同时整除3、5、7,因此,2×70+3×21+2×15-105p仍满足已知条件。特别地取p=2,可获得最小正整数解23。

分析至此,我们不仅弄清楚了为什么上面给出的解答是正确的,进而容易看到这一结果在3、5、7三数不变时很容易推广到一般余数的情形。如《孙子算经》术文后半段所指出的:“凡三三数之剩一则置七十,五五数之剩一则置二十一,七七数之剩一则置十五。一百六以上,以一百五减之,即得。”即,只要把上述算法中的余数2、3、2分别换成新的余数就行了。用现代符号可表示为:如果一个数3除余r1,5除余r2,7除余r3,则所求的解为N=70r1+21r2+15r3-105p, p为整数。因为70r1+21r2+15r3被3除余r1,被5除余r2,被7除余r3,而105p可被3、5、7除尽,所以上面的式子恰好满足题目的要求。

由于这一问题算法的关键在于70、21和15、105这四个数。所以在这一问题流传过程中,许多人为之作歌诀以帮助记忆。最早宋代周密在《志雅堂杂钞》卷下把解法编成口诀“三岁孩儿七十稀,五留廿一事尤奇;七度上元重相会,寒食清明便可知。”对于我们许多现代人来说,这诗需要解释才能参透其中的奥秘:古时候称正月十五日为“上元”,所以“上元”暗指15;历书上有“冬至百六是清明”,寒食是清明前一日,所以“寒食清明”暗指105。后来,清代褚人获在其《坚瓠集》内引《挑灯集异》的歌诀:“三人逢零七十稀,五马沿盘廿一奇。七星约在元宵里,一百零五定为除。”更易懂也更为人所熟悉的是明朝数学家程大位在《算法统宗》(1592)中给出的另一歌诀:“三人同行七十稀,五树梅花廿一枝,七子团圆正半月,除百零五便得知。”

当我们认真分析《孙子算经》对物不知数问题的漂亮解答时,我们还可以注意到它所提供的数学上很有用的原则和方法。

首先,我们可以把物不知数问题看做是求解如下的不定方程问题:寻找正整数N,满足N=3a+2=5b+3=7c+2。

为此,我们先求解齐次方程,即求解N=3a+0,N=5b+0,N=7c+0。易得这一齐次不定方程的通解:N=3×5×7p=105p,p∈Z。下一步,我们分别找N=3a+1,N=5b+0,N=7c+0;N=3a+0,N=5b+1,N=7c+0;N=3a+0,N=5b+0,N=7c+1的一个特解。根据前面介绍,我们知道可分别取70、21、15。进而可得到满足物不知数问题的一个特解:N=70×2+21×3+15×2。

最后,利用迭加原则,我们得到物不知数问题的通解:2×70+3×21+2×15-105p

用同样的分析,我们可得到更一般情形的通解。即一个数3除余r1,5除余r2,7除余r3,则所求的解为N=70r1+21r2+15r3-105p, p为正整数。

分析这一解题思路,我们采取了分析与综合的方法:将原问题分解成几个相关的简单问题,采取“各个击破”的办法,分别求得解答后,再将它们综合起来。这里的综合包括特解放大某个倍数、相加,然后再加上齐次方程的通解。这种思路在解决许多数学问题时都是有效的,值得读者细细品味。下面就是一个非常典型的例证。

找到一个函数f(x),在a, b,c三点取α,β,γ三值。

第一步特殊化:分别作函数p(x),使p(a)=1,p(b)=

p(c)=0;作函数q(x),使q(b)=1,q(a)=q(c)=0;作函数r(x),使r(c)=1,r(a)=r(b)=0。

第二步作叠加:αp(x)+βq(x)+γr(x)就满足条件。于是,一个所求函数f(x)=αp(x)+βq(x)+γr(x)。

下面所要做的就是求出p(x),q(x),r(x)。实现这一点也不困难。因为p(b)=p(c)=0,因此一种最简单的取法是令p(x)=λ(x-b)(x-c),其中λ是待定常数。由p(a)=1,非常容易地得到。于是。同理可得q。这样,我们就得到了问题的一个解:

运用同样的推理可容易地推广这一结果。即在n个不同点a1,a2,……,an函数各取值b1,b2,……,bn,则有:

与孙子方法中,加上一个105的整数倍即可得到通解类似,在上述结果中,我们同样可以添加上一个在a1,a2,……,an各点都等于0的函数而得到公式的通解。而由此得到的最终结果正是著名的拉格朗日插值公式。从孙子的原则来看,上述推导是多么简单明了。

让我们再次体会一下孙子方法提供的原则。要做出一个具有性质A, B,C的数学结构,办法是先做出“单因子构件”,也就是说做出性质B、C不发生作用,而性质A取单位量的构件。再做出性质C、A不发生作用,而性质B取单位量的构件,最后做出性质A、B不发生作用,而性质C取单位量的构件,那么所要求的构件可以由这些构件凑出来。这一原则在插值理论、代数理论及算子理论(泛函分析)之中都有应用。因此对孙子方法融会贯通,可为将来学习高等数学提供简单而具体的模型。

“物不知数”问题表面上看是一个游戏题,但实际上它有很强的天文学背景,具体说,它和古代编制历法过程中推算“上元积年”有密切联系。

中国古代历法有一个特点,为了推历首先要定一个计时的起点,叫做历元。对历元这一时刻,通常取一个甲子日的夜半,而且要恰好是朔旦及冬至。这是因为古人治历,是以夜半为一日的开始,朔旦为一月的开始,冬至为一年的开始;所以规定从冬至到冬至为一岁,朔旦到朔旦为一月,夜半到夜半为一日。因此,以甲子夜半恰好又是朔旦冬至的历元作为起算的开始,可以用朔望月、回归年的周期来进而推算以后的朔望和节气等。

西汉末年刘歆编订《三统历》时,为了彰显自己历法的神圣性,对历法中的计时起点又多加了许多新规定:除要求在甲子日的夜半恰好是朔旦及冬至外,还要求日月合璧(即要求日、月的经纬度正好相同)、五星连珠(木火土金水五大行星聚于同一方位)。由这些要求确定出的理想时刻称为上元,而从上元到制订历法那一年的累计年数称为“上元积年”。上元实际是若干天文周期的共同起点,有了上元和上元积年,历法家计算日、月、五星的运动和位置时就比较方便了。

刘歆《三统历》之后,直到元代郭守敬《授时历》(1280)以前,选择合适的上元成为中国古代传统历法所必须完成的首要任务之一。事实上,从《乾象历》(206)开始,历法开篇的第一句便是“上元某某以来,到某某年某某,积某某年”。透过这种以上元积年统贯整部历法结构的模式,即可一窥确立上元积年的重要性。从某种意义上讲,中国传统历法基本上就是围绕着上元的选择而编制出来的,以至于“一部中国历法史,几乎可以说是上元的演算史。”而上元的推算归结为数学,本质上就是“孙子问题”,或者说是一个一次同余组问题。

我们先以推算历元做一说明。设从历元到当年冬至,恰好经过N个回归年,而a为一个回归年的时间(单位是天),则a×N就是从历元起到所求年的冬至的全部天数。因为古代干支纪日以甲子日开始并以60日为一周期,所以用60去除aN所得余数r1就是当年冬至离其前一个甲子日夜半的天数。于是有同余式:aN≡r1(mod 60)。同理,已知b为一个朔望月(从平朔到平朔)时间,用b去除aN所得余数r2为冬至距前一个平朔的天数。于是有同余式:aN≡r2(mod b)。古代历算家根据长期的观测记录,已能确定a、b,而r1、r2也都可以通过实际观测得到。于是,在这些已知数值基础上反推N就是“物不知数”问题或者说是求解同余式组问题。

类似地,在推算上元时已有的依据是:古代历算家根据长期的观测记录,已经知道日、月、五星的运动周期并由此规定了各自的起点;在制历当年又可以实际测出它们的位置离各自的起点的距离。这样,每一个条件可以得到一个同余式,用各种周期和各相应的距离即可建立起更多的同余式。其中,日、月、五星的周期就是那些除数,编历时观测到的日、月、五星的方位离开起始点的距离就是那些余数。这些同余式与上面的同余式结合在一起即是上元积年满足的条件。于是,推算上元积年N(最后的结果取离制历时最短的时间,即取同余解中的最小正整数解)在数学上来说就是解数量更多的一次同余式组。

这种推算虽相当于“物不知数”问题,但随着上元要求条件的增多,以及后来观测的越来越精密,求解起来却比“物不知数”问题要复杂得多。一方面,这里的除数和余数都不是整数而是小数或是分数。另一方面,要求解的同余式组也要庞大得多。比如说,有人认为462年祖冲之的《大明历》要计算有11个同余式联立的同余式组。

于是,制历的迫切需要使解同余式组问题成为突出的时代需要。这促使当时的天文历算家去寻求一次同余式的一般算法。“大约在3世纪历法工作者开始应用剩余定理计算上元积年。我们认为……物不知数题解法不是作者的向壁虚构,而很可能是依据古代天文学家的上元积年算法写出来的。”也就是说,物不知数问题并不是作者向壁虚构的智力游戏,而很有可能是对当时历算家推算上元积年问题的数学概括。换言之,《孙子算经》中的“物不知数”题,正是以举例的形式,总结并反映了当时学者们已经掌握了解一次同余组的剩余定理的事实。这意味着,在《孙子算经》成书的魏晋南北朝时期,我国的历算家已掌握了按一定的程序来计算(比“物不知数”题复杂得多的)一次同余式的解的方法。也许可以认为,“物不知数”以数学游戏的形式记述它,正是这一算法已普及于民间的生动表现。

以后天文历算家长期沿用孙子算法推算上元积年,这中间肯定会引起更加深入的探讨。但遗憾的是,制历者只给出上元积年的结果,推算上元积年的具体算法却不曾见诸史志。直到13世纪,秦九韶集前法之大成,终于在一次同余式的研究上获得了超越前人的成果,并在其《数书九章》中提出了关于一次同余组的“大衍总数术”,从理论上对古代一次同余式组问题解法作出了辉煌的总结。

综上所述,我国古代关于一次同余论的研究,起源于汉代历算家关于上元积年的计算,是在汉代历算家探讨的基础上发展起来的。我国古代数学在一次同余论方面成就辉煌,汉代历算家对上元积年的推算有开辟先河的功绩。而与此密切相关的一次同余式组的理论和算法,正是在这种背景下发展起来并在南宋数学家秦九韶手中发扬光大的。

秦九韶(约1202~1261),字道古,出生于四川,普州安岳(今四川安岳县)人。因祖籍鲁郡,因此他自称鲁郡人。1219年,因避战乱随父一起到了南宋都城临安。秦九韶在这里度过了四五年的时间。1225年,秦九韶又随父重返四川。因为他生活的年代正处于南宋末年,社会非常动荡。1236年左右,他因战乱又离开四川,辗转多处后定居于湖州。1244年,秦九韶到建康府(现在的江苏省南京市)做官。然而,不久后他母亲去世,他不得不离任回湖州守孝三年。其后,“喜奢好大,嗜进谋身”一直热衷于仕途的秦九韶又在多地做官,晚年曾极力攀附当朝权贵贾似道。1261年,他被贬至梅州(今广东梅县),不久逝于任所。

毫无疑问的是,秦九韶是一个非常聪明的人,而且好学不倦且处处留心于学。特别是在临安的几年时间里,他利用各种便利条件,积极求学,学业大进。期间,他得以向他父亲下属负责测验天文、考定历法的太史局学者们学习天文历法知识,如他所说“早岁侍亲中都,因得访习于太史”,同时他又得以向“隐君子”学习数学,且向著名词人李刘学习骈骊诗词。对秦九韶的博学多能,与他同时代的“填词小说之才”周密曾称其“性极机巧,星象、音律、算术,以至营造等事,无不精究”,“游戏、毬、马、弓、剑,莫不能知”。当然,他真正伟大的成就体现在数学方面。在早年求学的基础上,秦九韶又自己继续潜心钻研。在为母守孝的三年时间里(1244~1247),他总结了自己长期研究所积累的数学知识和创造性的成果,完成了传世数学名著《数书九章》。其后,秦九韶热衷于谋求官职,追逐功名利禄,在数学上没有再获得进一步的成果。然而,仅此就足以使他成为中国宋元时期杰出的数学家之一。

对秦九韶的人品,后人评价不一。同时代的词人赵克庄与周密对他的许多做法都多有指责。周密说他在和州做官时曾利用职权贩盐,强行卖给百姓,从中牟利。定居湖州后,生活奢华,所建住宅“极其宏敞”,“后为列屋,以处秀姬、管弦、制乐、度曲,皆极精妙,用度无算”,很可能是他利用职权中饱私囊。刘克庄说他在琼州做官“仅百日许,郡人莫不厌其贪暴,作卒哭歌以快其去”。后人余嘉锡《南宋算学家秦九韶事迹考》中说他“虽能治天算,多技能,不过小人之才耳,何足道哉!”但也有人为其个人品行辩护,如清代数学家焦循在《天元一释》卷下说:“秦九韶为周密所丑诋,至于不堪,而其书亦晦而复显。密以填词小说之才,实学非其所知。即所称与吴履斋交稔,为贾相窜于梅州,力政不辍,则秦之为人亦瑰奇有用之才也。”而现代比利时学者李倍始在提到他时,则以欣赏的口气写道,这位奇才“无疑具有迷人的品格”。

与对其人品的评价不一完全不同,秦九韶的数学成就现在已获得公认与高度赞扬。对他的研究,近些年来为国内外学术界高度重视,成为中国数学史、世界数学史研究的重要课题。

美国科学史家萨顿(1884~1956)称赞秦九韶是“他那个民族、他那个时代乃至一切时期最伟大的数学家之一”。李倍始于1973年在美国出版了一本《十三世纪中国数学》的专著,主要讨论秦九韶的《数书九章》,比较全面地向西方介绍了秦九韶。其中,对秦九韶关于大衍求一术和高次数字方程的解法等发明做出了客观分析,并总结说:“考虑到秦九韶所处的时代,那么,美国著名科学史家萨顿对秦的赞扬并不为过。”

1987年5月,在北京师范大学隆重召开了“秦九韶《数书九章》成书740周年纪念暨学术研讨国际会议”,来自全世界的著名数学史专家、学者对这位中华古算大师及其著作做了全面的学术交流,并对他的一生及数学成就作了充分肯定。

1998年9月1日,安岳县城举行了秦九韶纪念馆奠基仪式。

1998年10月4日,数学史国际学术研讨会在武汉华中师范大学召开。2000年11月底,纪念馆基本建成。12月1日至3日隆重举行了秦九韶纪念馆落成暨学术研讨会。约50位科学史、数学史专家参加了这次全国性的学术研讨会,即我国第二次秦九韶学术研讨会。2004年4月8日至11日,第三次秦九韶学术研讨会在浙江省湖州市召开。

秦九韶的所有数学成就都体现在他唯一的数学著作《数书九章》中。《数书九章》最初称为《数学大略》或《数术大略》,全书9卷,每类为1卷。到元代时更名为《数学九章》,内容也由9卷改为18卷。到明万历年间,有抄录者把书名改为《数书九章》。后来,这一抄本流传较广,而书名也由此最终确定,并成为现在的通称,其原名则几乎被人遗忘。

《数书九章》现传本共18卷约20万字。书中搜集了与当时社会生活密切相关的9类数学实际应用问题,包括大衍、天时、田域、测望、赋役、钱谷、营建、军旅和市物。每类9题,共81题。从著作体例来看,《数书九章》受到《九章算术》等经典著作的传统影响,仍然采用问题集的形式,每题答案之后都有“术”说明解题方法。但与以往的数学著作比较,《数书九章》中问题的复杂程度和解题水平都有很大提高。如卷十三“计定筑城”题已知条件达88个,卷九“复邑修赋”题的答案有180个。另一点非常重要的不同是,秦九韶在各题术文(解题方法)之后,多附有“草”,即表明演算步骤的算草图式,有的题目还画有图。

另外,在这本内容异常丰富的数学著作中,不仅可以找到数学和天文历法乃至雨雪量等方面的珍贵资料,而且可以从中了解南宋时期户口增长、耕地扩展、赋税、利贷、度量衡以及货币流通、海外贸易等社会经济领域的真实情况。因此,这本从侧面翔实反映南宋社会经济情况的著作保存了许多非常有价值的历史资料,成为后人了解当时社会政治和经济生活的重要参考文献。

在这本划时代的名著中,秦九韶继承和发展了传统数学的理论和方法,在众多方面都有重大的发明和创新,取得了多项杰出的数学成果。如我们在第二编中已经介绍过的他在线性方程组解法方面所做的改进。此外,他还提出十进小数的表示法和已知三边求三角形面积的公式。书中的两项最重要的成就则是正负开方术(高次方程数值解法,我们在第一编第二章已做过介绍)和大衍求一术(一次同余组解法),它们不仅是中国数学史上光彩夺目的一页,在世界数学史上也占有重要的位置。

下面,我们就来介绍他在不定方程方面所做的杰出的数学贡献。

为清楚了解秦九韶在这方面做了些什么,让我们先回到“物不知数”问题。在对这一问题的分析中,我们已经注意到,求解问题的关键是找到与3、5、7三个已知除数(秦九韶称之为“定数”)对应的70、21、15(秦九韶称之为“用数”)。为了求得它们,我们做进一步分析。

我们已经知道70、21、15首先满足性质:它们分别是5与7、3与7、3与5的最小公倍数,因为3、5、7两两互素,因此它们分别是5×7、3×7、3×5的倍数。更具体的,“物不知数”问题中出现的三个数满足:70=2×(5×7);21=1×(3×7);15=1×(3×5)。为什么要分别取“2、1、1”这些倍数呢?因为只有如此取才能使70、21、15满足另一条性质:它们分别用3、5、7除,余数都是1。这些倍数秦九韶称为“乘率”。

显然,乘率是问题的关键。有了“乘率”,就可以容易地得到“用数”。事实上,对这一点,我们还可以有形式上更统一的结果。比如,为了得到定数3对应的“用数”,我们可以先求定数3、5、7的最小公倍数,因为三个数两两互素,因此其最小公倍数为3×5×7。下一步,先(得到的数值称为3对应的“衍数”),然后由乘率为2,得出3对应的“用数”2×(3×5×7)/3=70。同样的,定数5对应的“用数”,可通过式子得出;定数7对应的“用数”可通过式子得出。

上面的结果可以用一种较为一般的式子表示出来。已知a1,a2,a3是三个两两互素的正整数,某数N被a1,a2,a3除余数分别为r1,r2,r3。于是,为了求出数N,我们可以通过如下几步完成。

第一步,求“衍母”。即三者的最小公倍数,显然有M=a1a2a3

第二步,求“衍数”。有

第三步,求“乘率”。即找M1的一个倍数k1,使k1M1除以a1恰好余1;找M2的一个倍数k2,使k2M2除以a2恰好余1;找M3的一个倍数k3,使k3M3除以a3恰好余1。

第四步,利用《孙子算经》中给出的原则,所求数可表示为:

显然,这一结果可以直接推广到一般情形:设有一数N,被两两互素的a1,a2,a3,……,an除余数分别为r1,r2,r3,……,rn。那么,所求数可表示为:

,其中M=a1a2a3……an,ki为乘率,它们满足除以ai的余数为1(i=1,2,3,……,n),p∈Z。选取适当的p,还可以得到满足条件的最小正整数。

这一结论就是著名的中国剩余定理。由于其基本原则已经在《孙子算经》中给出,因此在我国也称为“孙子定理”。但最早给出上述推广结果的却是秦九韶。更重要的是,秦九韶彻底解决了在应用这一结果时必须要面对的真正关键点与难点:求“乘率”。

对物不知数问题而言,因为题目的数字比较简单,因此即便通过试验的方式也不难找到。比如,5×7的1倍,除以3的余数是2,不满足余数为1的性质,而当取5×7的2倍时,得到的70恰好满足除以3的余数是1。然而,当问题更复杂些时,又如何得到“乘率”呢?《孙子算经》中没有对此进行探讨,秦九韶则在经过深入研究后得到一种漂亮、有效的具体算法,这一算法被他称为“大衍求一术”。下面就对它做一下介绍。

我们以求乘率k1为例,令,则需要求满足“a1除k1G1,余数恰为1”的k1

秦九韶的处理办法是:先比较G1与a1。若G1>a1,则从G1中逐次减去a1,直到得到某个余数g1,g1<a1时为止。等价的处理是:用a1除G1,求得余数g1,显然g1<a1。若G1<a1,可直接取g1=G1。在经过这一步处理后,问题转化为寻找满足条件“a1除k1g1,余数恰为1”的k1,其中g1<a1

秦九韶把a1(一般的是ai)叫“定数”,g1(一般的是gi)叫“奇数”。于是他把自己求乘率的方法表述为:“置奇右上,定居右下,立天元一于左上,先以右上除右下,所得商数,与左上相生(即相乘),入左下。后乃以右行上下,以少除多,递互除之,所得商数,随之递互累乘,归左行上下,须使右上末后奇一而止,乃验左上所得,以为乘率。”

从原理上讲,秦九韶的大衍求一术是在传统更相减损算法的基础上发展起来的一种计算乘率的一般方法,其实质上相当于把奇数与定数做更相减损(或说是辗转相除),相继得商数列q1,q2,q3,……,qn与余数列r1,r2,r3,……,rn,然后在辗转相除时随即算出各c值。其具体步骤用现代记法可表示为:

要点之处在于,必须要使rn=1,且n是偶数,得到的cn才是所求的乘率。如果出现,rn=1,但n是奇数呢?办法是再多进行一步:让rn-1与rn相除,并形式上取rn-1=rnqn+1+1,其中qn+1=rn-1-1。显然,此时的余数rn+1仍为1。但项数n+1已经变为偶数。于是,此时求得的cn+1即为所求乘率。因而,不管何种情形,最后一步总能做到:出现余数1且项数为偶数,而整个计算至此终止。这也是秦九韶把自己的方法叫做“求一术”的原因。至于“大衍”,来自《周易》。

我们已经介绍过,当时计算仍然使用算筹。事实上,秦九韶给出的算法说明就是一种筹算方法。为帮助理解,我们做如下演算图,其中左侧是一般筹算程序示意,右侧是一个数字例子,其中奇数为20,定数为27。

具体各步的操作解释如下:

第一步是按要求摆放好:20置于右上,27置于右下。左上置天元1。

第二步,用20除27,商q1为1,余数r1为7。右下置余数r1=7,左下置放的c1取商数q1=1。

第三步,用7除20,商q2为2,余数r2为6。右上置余数r2=6,左上置放的c2取:c1q1+1=1×2+1=3。具体操作就是:把左下数乘以新得到的商加上原来左上的数,替换原来左上的数。

第四步,用6除7,商q3=1,余数r3=1。右下置余数r3=1,左下置放的c3取:c2q3+c1=3×1+1=4。具体操作就是:把左上数乘以新得到的商加上原来左下的数,替换原来左下的数。注意,此时,右下已出现了1。但操作并不能就此停止。因为此时得到的c3中3是奇数。而我们的操作需要在cn,n取偶数时停止。与之相对应的,必须当右上出现1时停止操作。

第五步,为使余数为1,由6=5×1+1,得商q4=1,余数r4=1。右上置余数r4=1,左上置放的c4取:c3q4+c2=4×5+3=23。具体操作就是:把原左下数乘以新得到的商加上原左上的数,替换原来左上的数。注意到,此时,右上角数字已变成1。与之对应的,c4中4为偶数,操作停止。最后左上角得到的c4即为所求乘率。

初看上去,我们的叙述烦琐、复杂,但体会整个操作方式,却会发现它井然有序:右行上下交互以少除多,所得商数和左上(或左下)相乘并入左下(或左上),直到右上方出现1为止。事实上,根据秦九韶的安排,各个余数中下标为奇数的都在右下角,下标为偶数的都在右上角,因此最后算至右上角为1时,对应的余数下标一定是偶数,于是至此终止操作。而此时相应的左上角的c值即为所求乘率。

为更好地理解这一算法,我们再举一个例子:其中G1=25,a1=18。

首先,比较G1与a1。因G1>a1,于是可以用a1除G1,求得余数g1=7,这样得到奇数为7,定数为18。然后可按秦九韶给出的筹算方式如下求出乘率。

事实上,只要明白了这种算法,是很容易得出乘率的。当熟悉之后,会体会到这种算法的简洁、明确,特别是其很强的机械性。

《数书九章》前两卷共9题要用大衍求一术求乘率,其中有的数据十分庞大,例如,古历会积一题要解同余式k·9253≡1(mod 225600)。如下,应用大衍求一术只需12步即可求出乘率k=172717。秦九韶算法的优越性由此可见一斑。

大衍求一术的提出,表明秦九韶已经圆满解决了已知除数(秦九韶称之为“问数”,相当于现在同余论中的模数)两两互素的情况。但在实际问题中,各模数不一定两两互素,甚至不一定是整数,可能是分数或小数。针对于此,秦九韶讨论了模数是收数(小数)、通数(分数)、元数(一般正整数)和复数(10n的倍数)几种情形,并对每种情形给出了处理方法。他先把收数和通数化成元数的情形。于是整个问题的困难之处归结到元数不两两互素的情形。

在现代数学中处理这种更复杂的情况,需要借助于素因子分解的思想把模数不两两互素的情形化为两两互素的情形。然而,中国传统数学没有素数概念,也没有将一个正整数用其素因子连乘积形式表示出来的思想,这使问题更为棘手。

尽管如此,秦九韶还是设计出了将模数化为两两互素的算法。在这套机械化的程序中,他虽然没有用到素因数概念,但其算法的作用完全相当于析取素因子的结果,他的这一工作被誉为是“没有素数概念的素数论”。这是数学史上第一次对模数非两两互素情况的有效处理。

秦九韶对这类问题的整个处理方法被他称为“大衍总数术”,它包括三大部分。其一,将给出的“问数”化成“元数”,如果“元数”不两两互素,则把它再进一步化为两两互素的定数。其二,利用“大衍求一术”求各个乘率。最后,利用中国剩余定理(孙子定理)求总数。

我们下面用秦九韶的方法完整地解一道题:物不知数,15除余8,8除余5,25除余13,求此数。用同余式可表示为:N≡8(mod 15)≡5(mod 8)≡13(mod 25)

解:第一步化元数15、8、25为定数3、8、25,其中定数3、8、25满足,它们两两互素,3×8×25为15、8、25的最小公倍数,且3|15,8|8,25|25。这一步是解决整个问题的关键之一。由于秦九韶的算法比较复杂,这里我们只给出结果,不再介绍具体算法。

在第一步后,原问题化为:物不知数,3除余8,8除余5,25除余13。用同余式可表示为:N≡8(mod 3)≡5(mod 8)≡13(mod 25)。对这一问题,我们可以按照上面提到的步骤求解。具体而言:

(1)求“衍母”:M=3×8×25=600。

(2)求“衍数”:

(3)求“奇数”:先看g1,因为,于是用a1(=3)除G1(=200),求得余数即为奇数,即有g1=2。同理可求g2,于是用a2(=8)除G2(=75),求得余数即有奇数,即有g2=3。对g 3:因为,因此可直接取g3=G3=24。由此我们得到了3个奇数:g1=2 g2=3 g3=24

(4)求“乘率”:其中k1×2≡1(mod 3)、k2×3≡1(mod 8)、k3×24≡1(mod 25),对此可通过大衍求一术,求得k1=2,k2=3,k3=24。

(5)求“用数”:

最后,应用中国剩余定理求得:。若取p=19,可得最小正整数解11813-600×19=413。

由此可见,《数书九章》首卷的大衍总数术,给出了一般物不知数问题解法的完整指南。在书中,秦九韶也通过九个问题,如“古历会积”、“治历演纪”“积尺寻源”、“推计土功”、“程行计地”等,展示了大衍总数术在解决历法、工程、赋役和军旅等实际问题中的广泛应用。综观秦九韶在物不知数问题上的工作,正如数学史家李文林、袁向东所说:“所有这些系统的理论,周密的考虑,即使以今天的眼光看来也很不简单,充分显示了秦九韶高超的数学水平和计算技巧。”

由此,物不知数问题在《孙子算经》中提出700多年后,终于在秦九韶的《数书九章》中被加以系统整理而形成了完善的理论和算法。这一成果,不仅在中国数学史上而且在世界数学史上都占有光荣的地位。用现代数学术语来说,《孙子算经》的物不知数在世界数学史上首次提出同余式问题,而秦九韶的大衍总数术则明确地、系统地叙述了求解一次同余式组的一般方法,从而比较圆满地解决了一次同余式组问题。

然而由于秦九韶的著作内容艰深,大衍术文又言简意赅,结果同时代人对其研究未能充分理解。到元代郭守敬创制《授时历》时,上元被废除,于是大衍术这一推算上元积年的算法在重视实用的中国遂成屠龙之技。这导致秦九韶的大衍术在元、明两代学者中不仅未能承传,而且到明代中叶时差一点就失传。这种情况直到500年后的清代中叶才得以改观。

先是清代戴震从《永乐大典》中辑出《数书九章》并收入《四库全书》,而后焦循自《四库全书》录得其中大衍类两卷,同时明代《数书九章》抄本也开始流传,由此“大衍术”被重新发掘出来。此后许多清代学者(张敦仁、骆腾凤、黄宗宪等)对其重新燃起了极大的研究热情,并对“大衍术”进行了解释、改进和简化。

张敦仁(1754~1834),山西阳城人,他的大衍术工作著录在三卷《求一算术》(1803)中。书中的序文对大衍求一术做了非常出色的解释:“算数之学,自《九章》而后,述作滋多,其最善者则有二术:一曰‘立天元一’,一曰‘求一’。……穷奇偶之情,莫善于‘求一’。‘求一’之术出于《孙子算经》物不知数之问。……独求一术仅见于宋秦九韶道古《数书九章》中,学者罕见其书,知之者鲜。”在自己的书中,张敦仁不仅探大衍求一术之源,而且对秦九韶求乘率的大衍求一术做出了浅显与清晰的解释。

骆腾凤则在《艺游录》中将一次不定方程的求解与大衍求一术联系起来,并应用大衍求一术成功地解释了百鸡术,这使后来的研究者认识到“求一术不仅能驭孙子题耳”,从而沟通了百鸡术和物不知数两类不定问题之间的关系。

更深入并富有创意的改进工作则来自晚清学者黄宗宪(约1805~1900)。在《求一术通解》(1874)中他对秦九韶的算法程序做了几方面的修正。我们已经提到,大衍术的关键之一在于把问数化为两两互素的定数。对此,秦九韶在没有素因子概念的条件下,自设算法,比较圆满地解决了问题。其方法在通常情况下是有效的,而且只要稍加修正,还可得到化元数为定数的一般的机械化算法。但秦九韶对自己方法的表述较隐晦,据清代学者张敦仁等的解释和改进后,才逐渐被理解。黄宗宪则在西学的影响下另辟蹊径,在中国最早提出将元数分解为素因子以求定数的方法,使化约元数为定数的演算臻于完善。他的这一独立做出的改进与我们下一章将提到的高斯的研究思路相同。黄宗宪的第二点改进是针对求乘率的大衍求一术,给出了更为有效的“求一术图式”。此外,他还另设“求反乘率”法,并利用反乘率概念自创求总数的新法。这一新法与西方欧拉提出的解法同理。

书中,黄宗宪还对求一术与孙子定理给出了不十分严密的证明,这是孙子定理与大衍求一术在中国提出后,中国数学家的首次理论证明。同时他还讨论了求一术在解二元一次不定方程方面的应用。黄宗宪关于同余式求解的研究,丰富和深化了中国传统数学的不定分析方法,在理论化方面具有一定的意义。

然而,无论是在时间上还是在研究深度上,黄宗宪的研究工作与西方相比都已经落在了后面。19世纪初,随着一位数学大师的横空出世,一次同余式(组)在欧洲得到了圆满解决。这位数学大师就是以“数学之王”而闻名的高斯。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈