郭园园,马婧宜,2
(1.中国科学院 自然科学史研究所,北京 100190;2.中国科学院大学 人文学院,北京 100049)
弃九法是一种检验正整数间加减乘除等计算结果的方法,现在属于初等数论范畴。下面以弃九法检验乘法运算为例,假设使用普通乘法运算方法得出正整数a,b的乘积是P,即ab=P。令
a=an10n+an-110n-1+…+a0,其中0≤ai<10
b=bm10m+bm-110m-1+…+b0,其中0≤bj<10
P=ck10k+ck-110k-1+…+c0,其中0≤ck<10
由于对于任何一个正整数n都有:10n≡1(mod 9),则有:
a≡an+an-1+...+a0(mod 9),
b≡bm+bm-1+...+b0(mod 9),
c≡ck+ck-1+...+c0(mod 9),
故有:(an+an-1+…+a0)(bm+bm-1+…+b0)≡ck+ck-1+…+c0(mod 9),若此式不成立,那么上面所求得的乘积是错误的,以上就是弃九法的检验原则[1]。除了理论价值以外,弃九法及其衍生算法在今天的金融学、编码学等领域有重要的应用价值。迄今为止,学界鲜有关于这种算法历史的研究,本文将对此算法的产生、演化和传播脉络进行梳理。
据现有史料,弃九法首先出现在10世纪阿拉伯数学家乌格里迪西(Abu' l Hasan Ahmad ibn Ibrāhīm Al-Uqlīdisī,约920—约980)所著《印度算术之书》(the Kitāb al-fusūl fī al-hisāb al-Hindī)[2]中。目前关于乌格利迪西生平的资料较为有限,只能确定他于公元952—953年在大马士革生活,并撰写了算术著作《印度算术之书》。学界一般认为“乌格里迪西”是古希腊数学家“欧几里得”名字的阿拉伯语翻译,“乌格里迪西”是用来称呼那些抄写欧几里得(Euclid,公元前330年—公元前275年)著作《原本》(Elements,约公元前300年)并进行贩卖的人[3],鉴于这类描述身份、职业的名字一般不世袭,由此可以推测乌格里迪西本人曾从事过相关工作。另外从《印度算术之书》的语言风格、内容安排和知识讲解方法可以推测作者曾有过数学教学的经历。
9世纪初阿拉伯数学家花拉子密(Muhammad ibn Mūsā al-Khowārizmī,约780—约850)撰写过一本关于印度数字及其算术知识的书,这是已知现存最早的介绍印度算术的阿拉伯文献。乌格里迪西在《印度算术之书》中指出,他在撰写该书时找到了当时能够找到的所有相关书籍,并进行了仔细的阅读和整理,由此推断乌格里迪西很可能阅读过花拉子密的著作。当时阿拉伯世界的数学受到多个文明数学传统的影响,大致形成了三套算术系统:一套是希腊-巴比伦传统的六十进制记数系统,这个系统一般运用在天文学领域;一套是拜占庭-阿拉伯特色的手势算术,它需要通过手势变化和心算进行计算;另外一套则是印度传统的十进位值制系统,使用这个算术系统一般需要配合印度土盘进行计算[2]。乌格里迪西在充分理解这些系统的异同、优缺点之后,将三种算术系统融入印度算术体系。另外由于造纸术传入阿拉伯世界,纸张逐渐得到普及,乌格里迪西又对印度土盘的计算规则做出了改进,使其更能适应纸笔的书写环境。
《印度算术之书》正文分为四卷。前三卷都会涉及十进制和六十进制数字的加减乘除、倍增、减半、开方等运算,这些内容由浅入深,第一卷对这些运算的具体操作方法进行初步介绍,第二卷进行更加深入的讲解,第三卷对这些运算的原理进行论述分析,第四卷则是介绍了原始印度算术的方法和工具。乌格里迪西在第二卷第一章讨论如何检验倍增计算是否正确时,首次介绍了弃九法①。乌格里迪西指出在他之前没有人写过或提及弃九法,而且在其他早期文明的数学知识中也没有发现相关算法,因此有理由相信乌格里迪西创造了弃九法。
根据同余理论,不难发现弃九法是检验原运算正确与否的必要条件,但不是充分条件。使用弃九法检验计算时,如果最终的弃九数不相等,则此计算一定错误;但如果两次计算的弃九数相等,也不能保证计算一定正确。乌格里迪西也意识到了这个问题,他在《印度算术之书》第三卷第七章中罗列了几种弃九法失效的情况。例如用弃九法检验乘法运算574×386=211 142可能是正确的,但是如果乘积结果换成211 412或211 232等数字,弃九法就没有办法检验出错误[2]。事实上,只要按照加、减、乘、除的四则运算法则进行运算,可能出现的错误类型往往是进位、借位、错位,这些错误比较容易通过弃九法检验出来。如果不是刻意去凑数,出现211 412或211 232等数字的可能性非常小。从后世弃九法一千多年的传播和演化来看,它是一种非常快速有效的检验方法。另外,在《印度算术之书》第三卷第八章中,乌格利迪西还将弃九法的应用范围扩展到了检验分数运算。
乌格利迪西的著作问世之后,弃九法便开始在阿拉伯世界广泛传播。阿尔·卡西(Ghiyāth al-Dīn Jamshīd Mas' ūd al-Kāshī,约1380—1429)是15世纪初阿拉伯世界最优秀的数学家之一,曾经担任过位于撒马尔罕的兀鲁伯格天文台(Ulugh Beg Observatory)的负责人。卡西在1427年完成了代表作《算术之钥》(Key to Arithmetic)[4]。该书是卡西所有作品中篇幅最大的一本,它几乎涵盖了当时全部的初等数学知识,很好地诠释了微积分产生前的初等数学知识体系。本书除了满足一般学生的需求外,对于从事实际工作的读者,如天文学家、测量员、建筑师、商人等也有帮助。《算术之钥》共五卷:第一卷,整数的算术;第二卷,分数的算术;第三卷,天文学家的计算法(六十进制数码的算术);第四卷,图形的度量;第五卷,用还原与对消及“双试错法”求解未知数。
在《算术之钥》第一卷共六章,其中前五章讲述了印度数字及其加倍、减半、加、减、乘、除和开方算法。在第六章对弃九法进行了讲解,但篇幅较简短,原文如下:检验计算的正确性可以利用弃九法,如果运算准确则一定能通过弃九法的检验,而没有必要将原来的问题重新计算。该方法是将某个数字的每一位上的数字相加,从结果中逐个减去数字9,直至剩余的差为9或者小于9,此即为原数的弃九数。例如要求数字64 578的弃九数,将数字8、7、5、4、6相加后逐个减去数字9,剩余3,此即为原数的弃九数。用弃九法检验两数乘法,用乘数的弃九数乘以被乘数的弃九数,然后将所得乘积逐个减去数字9,剩余的差应等于原乘积的弃九数,这种方法可以用来检验乘法运算的正确性[4]。
图1 阿尔·卡西《论圆周》中求的算表
在欧洲,弃九法最早出现在斐波那契(Fibonacci)所著《计算之书》(Liber abaci)中。斐波那契原名“列奥纳多·波那契(Leonardo Bonacci)”,生卒年尚不明确,但能确定他活跃于1170—1250年间。斐波那契出生在意大利,其父在布吉亚(Bugia,今阿尔及利亚东北部)的一个港口工作,他从小跟随父亲在北非生活并接受教育,随后因商贸活动而游历西西里、埃及、叙利亚等地区,并从当地人那里学习了阿拉伯数学。他于1202年编撰《计算之书》,开始向欧洲介绍了阿拉伯数学,这本书被认为是中世纪欧洲最重要的著作之一,被称为中世纪实用数学之百科全书,对文艺复兴时期的欧洲数学产生了广泛影响。该书共十五章,可分为六部分:第一部分介绍了印度阿拉伯数字及其四则运算;第二部分主要介绍了商业计算中的数学应用;第三部分包括了数列求和、利息计算等多种问题;第四部分介绍了与中国盈不足术相似的“Elchataym算法”;第五部分讨论了平方根、立方根等问题;第六部分介绍了还原与对消方法即二次方程问题[6]。除了《计算之书》外,斐波那契还撰写了《实用几何》(Practica Geomertriae,1220)、《平方之书》(Liber quadratorum,1225)、《花朵》(Flos,1225)等数学著作。
检验的思想贯穿《计算之书》全书,斐波那契在第二章介绍整数乘法时便引入了弃九法③,在第三章中对加法中的弃九法检验原理进行了说明,他给出的解释较乌格里迪西更为详细,用现代数学语言表示为:
假设ab+bg=ag,且ab=9n1+e1,bg=9n2+e2,那么ab和bg的弃九数分别为e1、e2。如果e1、e2都为0,那么ag=9(n1+n2)+e1+e2的弃九数也是0;如果e1为0,e2不为0,那么ag=9(n1+n2)+e1+e2的弃九数就是e2。如果e1、e2都不为0,则ag=9(n1+n2)+e1+e2的弃九数就应该是e1+e2的弃九数[7]。
很明显,弃七法和弃九法的检验过程基本相同,另外《计算之书》中出现的弃十一法、弃十三法和弃十七法检验过程也与之相似。但斐波那契在书中并没有解释使用另外几种“弃某法”的原因。事实上,以弃七法为例,若10n≡k(mod 7),k的取值呈现1-3-2-6-4-5的周期性循环,这样可以起到很好的检验效果。笔者认为,弃九法及其衍生的弃七法等检验算法是斐波那契直接引自阿拉伯数学。
斐波那契之后,《计算之书》中的数学内容在欧洲产生了深远的影响。例如法国数学家许凯(Nicolas Chuquet,约1455—1488)[8]的《算术三编》(Triparty en la Sciences des Nombres,1484),意大利数学家帕乔利(Luca Pacioli,1445—1517)[9]的《算术、几何、比和比例概要(数学大全)》(Summa de arithmetica,geometria,proportioni et proportionalita,1494)等作品在写作上都或多或少受到了《计算之书》的影响,但在弃数检验方面一般只介绍弃九法和弃七法。
16世纪中期,为了应对宗教改革带来的冲击,教皇保罗三世(Pope Paul III,1534—1549在位)批准成立了耶稣会(Society of Jesus)。德国数学家克拉维乌斯(Christoph Clavius,1537—1612)是耶稣会一员,于1565年开始在罗马学院担任数学教师,意大利传教士利玛窦(Matteo Ricci,1552—1610)在来华之前便是他的学生。克拉维乌斯[10]所著《实用算术概要》(Epitome Arithmeticae Practicae,1583)中对弃数检验法的介绍相当有限,仅在讲解正整数四则运算时演示了弃九法、弃七法的使用方法。同时他引入字母X符号来辅助弃九数、弃七数。对于加法、减法和乘法、除法,其标记方法有所不同,如图2所示。
图2 克拉维乌斯对加法使用弃九法检验图示
以加法710 654+8 907+56 789+880=777 230为例,在加法中,和的弃九数8写在X右边,四个加数的弃九数5、6、8、7之和26的弃九数8写在左边,对比X两边的数字,如果一致说明计算可能正确;不一致则说明计算有错,如图3所示。减法的检验与之类似。
图3 克拉维乌斯对乘法使用弃九法检验图示
图4 《同文算指》中对加法使用弃九法检验图示
在乘法600 394×8=4 803 152中,被乘数与乘数的弃九数4、8分别写在X的左、右两边,将这两个弃九数的乘积32弃九得到5,写在X上方,原式乘积的弃九数5写在下面,对比X上下的数字,如果一致说明计算可能正确;不一致则说明计算有错。除法的检验与之类似。
明万历十一年(1582年)利玛窦进入中国传教,在华期间他曾与徐光启(1562—1633)合译《几何原本》、与李之藻(1571—1630)共同编译了《同文算指》(1613),这在中国数学发展史上被认为是西方数学传入中国的开始[11]。其中《同文算指》的主要内容来自克拉维乌斯的《实用算术概要》和程大位(1533—1606)的《算法统宗》。《同文算指》分为“前编”“通编”“别编”,其中“前编”主要讲述整数及分数的四则运算,其中加法、减法与乘法的计算方法与现在的方法基本相同,除法则使用15世纪末的“削减法”;“通编”的内容有比例、比例分配、盈不足问题、级数与带从开平方等;“别编”有只有截圆弦算。作为第一部介绍欧洲笔算的著作,《同文算指》给出的整数、分数表示方法在梅文鼎《笔算》和梅瑴成主编的《数理精蕴》等算术作品中得到了继承,对笔算在中国的应用普及起到了很大作用[12]。
《同文算指》中大量题目来自克拉维乌斯的作品,因此“前编”在介绍四则运算时,也对每道题目分别运用弃九法和弃七法进行了检验,李之藻将其译为“九减”和“七减”。在《同文算指》中有十余道使用弃九法和弃七法的题目直接翻译自《实用算术概要》,同时保留了X的符号。李之藻对弃数检验法的评价是“九减、七减法繁碎难用,然出巧思、具至理,录之备玩”[13]。
继《同文算指》之后,在明末清初的《太西算要》(1625)[14]、《欧罗巴西镜录》[15]中也都有类似的弃九法和弃七法内容,同时保留了X的符号。到了晚清,弃九法已经在我国广泛流传,例如在曹汝英(1870—1924)所著的《直方大斋数学》(1903—1907)[16]、潘应祺(1866—1926)所著的《算术驾说》(1907)[17]等初等数学教科书都可以找到相关算法。中国教育部在1952年颁布的《中学数学教学大纲(草案)》中关于算术部分的说明中指出:在学习整除的特质时,最好使学生会用弃九法来检验演算的结果[18]。但是在1954年颁布的《中学数学教学大纲(修订草案)》中却删除了相关内容[19]。近些年,弃九法再次出现在我国高中数学教材选修内容中[20]。
注释
①乌格利迪西及后世的阿拉伯数学家阿尔·卡西在讲解弃九法时,所用阿拉伯语字面原意是“平衡”,因此弃九法通过字面意思可译为“平衡术”。下文出现的弃九数对应的阿拉伯原文可译为“平衡数”,相当于今天同余理论中的模数。
②在上述算表最右侧一列的数字就是为了检验乘法运算而得到的弃九数,由于是检验六十进制数字的运算结果,确切的说使用的是弃59法,这些数字为弃59数。
③1857年邦孔帕尼(B.Boncompagni,1821—1894)基于在欧洲尚存的多个斐波那契著作手稿编纂了《十三世纪斐波那契数学著作全集》。《计算之书》在此书卷一中,仍以拉丁文出版。2002年,《计算之书》的英译本才由斯普林格(Springer)出版社出版,译者是美国的西格尔(L.E.Sigler)教授。西格尔教授根据邦孔帕尼整理出版的《计算之书》进行翻译,翻译过程中他采取了“直译”的方式,没有对译文进行更多加工和修饰,以求保持《计算之书》拉丁文版本之原貌。2008年,纪志刚教授及其团队将上述英译本译为汉语,并由科学出版社出版。中译本中将此算法直译为“弃某法”,同时将“弃某数”全部译为“留数”。
④目前我国居民身份证号码、图书ISBN编号等的最后一位校验码主要利用弃十一法进行计算和校验。