郭園園,馬婧宜,2
(1.中國(guó)科學(xué)院 自然科學(xué)史研究所,北京 100190;2.中國(guó)科學(xué)院大學(xué) 人文學(xué)院,北京 100049)
棄九法是一種檢驗(yàn)正整數(shù)間加減乘除等計(jì)算結(jié)果的方法,現(xiàn)在屬于初等數(shù)論范疇。下面以棄九法檢驗(yàn)乘法運(yùn)算為例,假設(shè)使用普通乘法運(yùn)算方法得出正整數(shù)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
由于對(duì)于任何一個(gè)正整數(shù)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),若此式不成立,那么上面所求得的乘積是錯(cuò)誤的,以上就是棄九法的檢驗(yàn)原則[1]。除了理論價(jià)值以外,棄九法及其衍生算法在今天的金融學(xué)、編碼學(xué)等領(lǐng)域有重要的應(yīng)用價(jià)值。迄今為止,學(xué)界鮮有關(guān)于這種算法歷史的研究,本文將對(duì)此算法的產(chǎn)生、演化和傳播脈絡(luò)進(jìn)行梳理。
據(jù)現(xiàn)有史料,棄九法首先出現(xiàn)在10世紀(jì)阿拉伯?dāng)?shù)學(xué)家烏格里迪西(Abu' l Hasan Ahmad ibn Ibrāhīm Al-Uqlīdisī,約920—約980)所著《印度算術(shù)之書》(the Kitāb al-fusūl fī al-hisāb al-Hindī)[2]中。目前關(guān)于烏格利迪西生平的資料較為有限,只能確定他于公元952—953年在大馬士革生活,并撰寫了算術(shù)著作《印度算術(shù)之書》。學(xué)界一般認(rèn)為“烏格里迪西”是古希臘數(shù)學(xué)家“歐幾里得”名字的阿拉伯語(yǔ)翻譯,“烏格里迪西”是用來(lái)稱呼那些抄寫歐幾里得(Euclid,公元前330年—公元前275年)著作《原本》(Elements,約公元前300年)并進(jìn)行販賣的人[3],鑒于這類描述身份、職業(yè)的名字一般不世襲,由此可以推測(cè)烏格里迪西本人曾從事過(guò)相關(guān)工作。另外從《印度算術(shù)之書》的語(yǔ)言風(fēng)格、內(nèi)容安排和知識(shí)講解方法可以推測(cè)作者曾有過(guò)數(shù)學(xué)教學(xué)的經(jīng)歷。
9世紀(jì)初阿拉伯?dāng)?shù)學(xué)家花拉子密(Muhammad ibn Mūsā al-Khowārizmī,約780—約850)撰寫過(guò)一本關(guān)于印度數(shù)字及其算術(shù)知識(shí)的書,這是已知現(xiàn)存最早的介紹印度算術(shù)的阿拉伯文獻(xiàn)。烏格里迪西在《印度算術(shù)之書》中指出,他在撰寫該書時(shí)找到了當(dāng)時(shí)能夠找到的所有相關(guān)書籍,并進(jìn)行了仔細(xì)的閱讀和整理,由此推斷烏格里迪西很可能閱讀過(guò)花拉子密的著作。當(dāng)時(shí)阿拉伯世界的數(shù)學(xué)受到多個(gè)文明數(shù)學(xué)傳統(tǒng)的影響,大致形成了三套算術(shù)系統(tǒng):一套是希臘-巴比倫傳統(tǒng)的六十進(jìn)制記數(shù)系統(tǒng),這個(gè)系統(tǒng)一般運(yùn)用在天文學(xué)領(lǐng)域;一套是拜占庭-阿拉伯特色的手勢(shì)算術(shù),它需要通過(guò)手勢(shì)變化和心算進(jìn)行計(jì)算;另外一套則是印度傳統(tǒng)的十進(jìn)位值制系統(tǒng),使用這個(gè)算術(shù)系統(tǒng)一般需要配合印度土盤進(jìn)行計(jì)算[2]。烏格里迪西在充分理解這些系統(tǒng)的異同、優(yōu)缺點(diǎn)之后,將三種算術(shù)系統(tǒng)融入印度算術(shù)體系。另外由于造紙術(shù)傳入阿拉伯世界,紙張逐漸得到普及,烏格里迪西又對(duì)印度土盤的計(jì)算規(guī)則做出了改進(jìn),使其更能適應(yīng)紙筆的書寫環(huán)境。
《印度算術(shù)之書》正文分為四卷。前三卷都會(huì)涉及十進(jìn)制和六十進(jìn)制數(shù)字的加減乘除、倍增、減半、開方等運(yùn)算,這些內(nèi)容由淺入深,第一卷對(duì)這些運(yùn)算的具體操作方法進(jìn)行初步介紹,第二卷進(jìn)行更加深入的講解,第三卷對(duì)這些運(yùn)算的原理進(jìn)行論述分析,第四卷則是介紹了原始印度算術(shù)的方法和工具。烏格里迪西在第二卷第一章討論如何檢驗(yàn)倍增計(jì)算是否正確時(shí),首次介紹了棄九法①。烏格里迪西指出在他之前沒(méi)有人寫過(guò)或提及棄九法,而且在其他早期文明的數(shù)學(xué)知識(shí)中也沒(méi)有發(fā)現(xiàn)相關(guān)算法,因此有理由相信烏格里迪西創(chuàng)造了棄九法。
根據(jù)同余理論,不難發(fā)現(xiàn)棄九法是檢驗(yàn)原運(yùn)算正確與否的必要條件,但不是充分條件。使用棄九法檢驗(yàn)計(jì)算時(shí),如果最終的棄九數(shù)不相等,則此計(jì)算一定錯(cuò)誤;但如果兩次計(jì)算的棄九數(shù)相等,也不能保證計(jì)算一定正確。烏格里迪西也意識(shí)到了這個(gè)問(wèn)題,他在《印度算術(shù)之書》第三卷第七章中羅列了幾種棄九法失效的情況。例如用棄九法檢驗(yàn)乘法運(yùn)算574×386=211 142可能是正確的,但是如果乘積結(jié)果換成211 412或211 232等數(shù)字,棄九法就沒(méi)有辦法檢驗(yàn)出錯(cuò)誤[2]。事實(shí)上,只要按照加、減、乘、除的四則運(yùn)算法則進(jìn)行運(yùn)算,可能出現(xiàn)的錯(cuò)誤類型往往是進(jìn)位、借位、錯(cuò)位,這些錯(cuò)誤比較容易通過(guò)棄九法檢驗(yàn)出來(lái)。如果不是刻意去湊數(shù),出現(xiàn)211 412或211 232等數(shù)字的可能性非常小。從后世棄九法一千多年的傳播和演化來(lái)看,它是一種非??焖儆行У臋z驗(yàn)方法。另外,在《印度算術(shù)之書》第三卷第八章中,烏格利迪西還將棄九法的應(yīng)用范圍擴(kuò)展到了檢驗(yàn)分?jǐn)?shù)運(yùn)算。
烏格利迪西的著作問(wèn)世之后,棄九法便開始在阿拉伯世界廣泛傳播。阿爾·卡西(Ghiyāth al-Dīn Jamshīd Mas' ūd al-Kāshī,約1380—1429)是15世紀(jì)初阿拉伯世界最優(yōu)秀的數(shù)學(xué)家之一,曾經(jīng)擔(dān)任過(guò)位于撒馬爾罕的兀魯伯格天文臺(tái)(Ulugh Beg Observatory)的負(fù)責(zé)人。卡西在1427年完成了代表作《算術(shù)之鑰》(Key to Arithmetic)[4]。該書是卡西所有作品中篇幅最大的一本,它幾乎涵蓋了當(dāng)時(shí)全部的初等數(shù)學(xué)知識(shí),很好地詮釋了微積分產(chǎn)生前的初等數(shù)學(xué)知識(shí)體系。本書除了滿足一般學(xué)生的需求外,對(duì)于從事實(shí)際工作的讀者,如天文學(xué)家、測(cè)量員、建筑師、商人等也有幫助?!端阈g(shù)之鑰》共五卷:第一卷,整數(shù)的算術(shù);第二卷,分?jǐn)?shù)的算術(shù);第三卷,天文學(xué)家的計(jì)算法(六十進(jìn)制數(shù)碼的算術(shù));第四卷,圖形的度量;第五卷,用還原與對(duì)消及“雙試錯(cuò)法”求解未知數(shù)。
在《算術(shù)之鑰》第一卷共六章,其中前五章講述了印度數(shù)字及其加倍、減半、加、減、乘、除和開方算法。在第六章對(duì)棄九法進(jìn)行了講解,但篇幅較簡(jiǎn)短,原文如下:檢驗(yàn)計(jì)算的正確性可以利用棄九法,如果運(yùn)算準(zhǔn)確則一定能通過(guò)棄九法的檢驗(yàn),而沒(méi)有必要將原來(lái)的問(wèn)題重新計(jì)算。該方法是將某個(gè)數(shù)字的每一位上的數(shù)字相加,從結(jié)果中逐個(gè)減去數(shù)字9,直至剩余的差為9或者小于9,此即為原數(shù)的棄九數(shù)。例如要求數(shù)字64 578的棄九數(shù),將數(shù)字8、7、5、4、6相加后逐個(gè)減去數(shù)字9,剩余3,此即為原數(shù)的棄九數(shù)。用棄九法檢驗(yàn)兩數(shù)乘法,用乘數(shù)的棄九數(shù)乘以被乘數(shù)的棄九數(shù),然后將所得乘積逐個(gè)減去數(shù)字9,剩余的差應(yīng)等于原乘積的棄九數(shù),這種方法可以用來(lái)檢驗(yàn)乘法運(yùn)算的正確性[4]。
圖1 阿爾·卡西《論圓周》中求的算表
在歐洲,棄九法最早出現(xiàn)在斐波那契(Fibonacci)所著《計(jì)算之書》(Liber abaci)中。斐波那契原名“列奧納多·波那契(Leonardo Bonacci)”,生卒年尚不明確,但能確定他活躍于1170—1250年間。斐波那契出生在意大利,其父在布吉亞(Bugia,今阿爾及利亞?wèn)|北部)的一個(gè)港口工作,他從小跟隨父親在北非生活并接受教育,隨后因商貿(mào)活動(dòng)而游歷西西里、埃及、敘利亞等地區(qū),并從當(dāng)?shù)厝四抢飳W(xué)習(xí)了阿拉伯?dāng)?shù)學(xué)。他于1202年編撰《計(jì)算之書》,開始向歐洲介紹了阿拉伯?dāng)?shù)學(xué),這本書被認(rèn)為是中世紀(jì)歐洲最重要的著作之一,被稱為中世紀(jì)實(shí)用數(shù)學(xué)之百科全書,對(duì)文藝復(fù)興時(shí)期的歐洲數(shù)學(xué)產(chǎn)生了廣泛影響。該書共十五章,可分為六部分:第一部分介紹了印度阿拉伯?dāng)?shù)字及其四則運(yùn)算;第二部分主要介紹了商業(yè)計(jì)算中的數(shù)學(xué)應(yīng)用;第三部分包括了數(shù)列求和、利息計(jì)算等多種問(wèn)題;第四部分介紹了與中國(guó)盈不足術(shù)相似的“Elchataym算法”;第五部分討論了平方根、立方根等問(wèn)題;第六部分介紹了還原與對(duì)消方法即二次方程問(wèn)題[6]。除了《計(jì)算之書》外,斐波那契還撰寫了《實(shí)用幾何》(Practica Geomertriae,1220)、《平方之書》(Liber quadratorum,1225)、《花朵》(Flos,1225)等數(shù)學(xué)著作。
檢驗(yàn)的思想貫穿《計(jì)算之書》全書,斐波那契在第二章介紹整數(shù)乘法時(shí)便引入了棄九法③,在第三章中對(duì)加法中的棄九法檢驗(yàn)原理進(jìn)行了說(shuō)明,他給出的解釋較烏格里迪西更為詳細(xì),用現(xiàn)代數(shù)學(xué)語(yǔ)言表示為:
假設(shè)ab+bg=ag,且ab=9n1+e1,bg=9n2+e2,那么ab和bg的棄九數(shù)分別為e1、e2。如果e1、e2都為0,那么ag=9(n1+n2)+e1+e2的棄九數(shù)也是0;如果e1為0,e2不為0,那么ag=9(n1+n2)+e1+e2的棄九數(shù)就是e2。如果e1、e2都不為0,則ag=9(n1+n2)+e1+e2的棄九數(shù)就應(yīng)該是e1+e2的棄九數(shù)[7]。
很明顯,棄七法和棄九法的檢驗(yàn)過(guò)程基本相同,另外《計(jì)算之書》中出現(xiàn)的棄十一法、棄十三法和棄十七法檢驗(yàn)過(guò)程也與之相似。但斐波那契在書中并沒(méi)有解釋使用另外幾種“棄某法”的原因。事實(shí)上,以棄七法為例,若10n≡k(mod 7),k的取值呈現(xiàn)1-3-2-6-4-5的周期性循環(huán),這樣可以起到很好的檢驗(yàn)效果。筆者認(rèn)為,棄九法及其衍生的棄七法等檢驗(yàn)算法是斐波那契直接引自阿拉伯?dāng)?shù)學(xué)。
斐波那契之后,《計(jì)算之書》中的數(shù)學(xué)內(nèi)容在歐洲產(chǎn)生了深遠(yuǎn)的影響。例如法國(guó)數(shù)學(xué)家許凱(Nicolas Chuquet,約1455—1488)[8]的《算術(shù)三編》(Triparty en la Sciences des Nombres,1484),意大利數(shù)學(xué)家帕喬利(Luca Pacioli,1445—1517)[9]的《算術(shù)、幾何、比和比例概要(數(shù)學(xué)大全)》(Summa de arithmetica,geometria,proportioni et proportionalita,1494)等作品在寫作上都或多或少受到了《計(jì)算之書》的影響,但在棄數(shù)檢驗(yàn)方面一般只介紹棄九法和棄七法。
16世紀(jì)中期,為了應(yīng)對(duì)宗教改革帶來(lái)的沖擊,教皇保羅三世(Pope Paul III,1534—1549在位)批準(zhǔn)成立了耶穌會(huì)(Society of Jesus)。德國(guó)數(shù)學(xué)家克拉維烏斯(Christoph Clavius,1537—1612)是耶穌會(huì)一員,于1565年開始在羅馬學(xué)院擔(dān)任數(shù)學(xué)教師,意大利傳教士利瑪竇(Matteo Ricci,1552—1610)在來(lái)華之前便是他的學(xué)生??死S烏斯[10]所著《實(shí)用算術(shù)概要》(Epitome Arithmeticae Practicae,1583)中對(duì)棄數(shù)檢驗(yàn)法的介紹相當(dāng)有限,僅在講解正整數(shù)四則運(yùn)算時(shí)演示了棄九法、棄七法的使用方法。同時(shí)他引入字母X符號(hào)來(lái)輔助棄九數(shù)、棄七數(shù)。對(duì)于加法、減法和乘法、除法,其標(biāo)記方法有所不同,如圖2所示。
圖2 克拉維烏斯對(duì)加法使用棄九法檢驗(yàn)圖示
以加法710 654+8 907+56 789+880=777 230為例,在加法中,和的棄九數(shù)8寫在X右邊,四個(gè)加數(shù)的棄九數(shù)5、6、8、7之和26的棄九數(shù)8寫在左邊,對(duì)比X兩邊的數(shù)字,如果一致說(shuō)明計(jì)算可能正確;不一致則說(shuō)明計(jì)算有錯(cuò),如圖3所示。減法的檢驗(yàn)與之類似。
圖3 克拉維烏斯對(duì)乘法使用棄九法檢驗(yàn)圖示
圖4 《同文算指》中對(duì)加法使用棄九法檢驗(yàn)圖示
在乘法600 394×8=4 803 152中,被乘數(shù)與乘數(shù)的棄九數(shù)4、8分別寫在X的左、右兩邊,將這兩個(gè)棄九數(shù)的乘積32棄九得到5,寫在X上方,原式乘積的棄九數(shù)5寫在下面,對(duì)比X上下的數(shù)字,如果一致說(shuō)明計(jì)算可能正確;不一致則說(shuō)明計(jì)算有錯(cuò)。除法的檢驗(yàn)與之類似。
明萬(wàn)歷十一年(1582年)利瑪竇進(jìn)入中國(guó)傳教,在華期間他曾與徐光啟(1562—1633)合譯《幾何原本》、與李之藻(1571—1630)共同編譯了《同文算指》(1613),這在中國(guó)數(shù)學(xué)發(fā)展史上被認(rèn)為是西方數(shù)學(xué)傳入中國(guó)的開始[11]。其中《同文算指》的主要內(nèi)容來(lái)自克拉維烏斯的《實(shí)用算術(shù)概要》和程大位(1533—1606)的《算法統(tǒng)宗》?!锻乃阒浮贩譃椤扒熬帯薄巴ň帯薄皠e編”,其中“前編”主要講述整數(shù)及分?jǐn)?shù)的四則運(yùn)算,其中加法、減法與乘法的計(jì)算方法與現(xiàn)在的方法基本相同,除法則使用15世紀(jì)末的“削減法”;“通編”的內(nèi)容有比例、比例分配、盈不足問(wèn)題、級(jí)數(shù)與帶從開平方等;“別編”有只有截圓弦算。作為第一部介紹歐洲筆算的著作,《同文算指》給出的整數(shù)、分?jǐn)?shù)表示方法在梅文鼎《筆算》和梅瑴成主編的《數(shù)理精蘊(yùn)》等算術(shù)作品中得到了繼承,對(duì)筆算在中國(guó)的應(yīng)用普及起到了很大作用[12]。
《同文算指》中大量題目來(lái)自克拉維烏斯的作品,因此“前編”在介紹四則運(yùn)算時(shí),也對(duì)每道題目分別運(yùn)用棄九法和棄七法進(jìn)行了檢驗(yàn),李之藻將其譯為“九減”和“七減”。在《同文算指》中有十余道使用棄九法和棄七法的題目直接翻譯自《實(shí)用算術(shù)概要》,同時(shí)保留了X的符號(hào)。李之藻對(duì)棄數(shù)檢驗(yàn)法的評(píng)價(jià)是“九減、七減法繁碎難用,然出巧思、具至理,錄之備玩”[13]。
繼《同文算指》之后,在明末清初的《太西算要》(1625)[14]、《歐羅巴西鏡錄》[15]中也都有類似的棄九法和棄七法內(nèi)容,同時(shí)保留了X的符號(hào)。到了晚清,棄九法已經(jīng)在我國(guó)廣泛流傳,例如在曹汝英(1870—1924)所著的《直方大齋數(shù)學(xué)》(1903—1907)[16]、潘應(yīng)祺(1866—1926)所著的《算術(shù)駕說(shuō)》(1907)[17]等初等數(shù)學(xué)教科書都可以找到相關(guān)算法。中國(guó)教育部在1952年頒布的《中學(xué)數(shù)學(xué)教學(xué)大綱(草案)》中關(guān)于算術(shù)部分的說(shuō)明中指出:在學(xué)習(xí)整除的特質(zhì)時(shí),最好使學(xué)生會(huì)用棄九法來(lái)檢驗(yàn)演算的結(jié)果[18]。但是在1954年頒布的《中學(xué)數(shù)學(xué)教學(xué)大綱(修訂草案)》中卻刪除了相關(guān)內(nèi)容[19]。近些年,棄九法再次出現(xiàn)在我國(guó)高中數(shù)學(xué)教材選修內(nèi)容中[20]。
注釋
①烏格利迪西及后世的阿拉伯?dāng)?shù)學(xué)家阿爾·卡西在講解棄九法時(shí),所用阿拉伯語(yǔ)字面原意是“平衡”,因此棄九法通過(guò)字面意思可譯為“平衡術(shù)”。下文出現(xiàn)的棄九數(shù)對(duì)應(yīng)的阿拉伯原文可譯為“平衡數(shù)”,相當(dāng)于今天同余理論中的模數(shù)。
②在上述算表最右側(cè)一列的數(shù)字就是為了檢驗(yàn)乘法運(yùn)算而得到的棄九數(shù),由于是檢驗(yàn)六十進(jìn)制數(shù)字的運(yùn)算結(jié)果,確切的說(shuō)使用的是棄59法,這些數(shù)字為棄59數(shù)。
③1857年邦孔帕尼(B.Boncompagni,1821—1894)基于在歐洲尚存的多個(gè)斐波那契著作手稿編纂了《十三世紀(jì)斐波那契數(shù)學(xué)著作全集》。《計(jì)算之書》在此書卷一中,仍以拉丁文出版。2002年,《計(jì)算之書》的英譯本才由斯普林格(Springer)出版社出版,譯者是美國(guó)的西格爾(L.E.Sigler)教授。西格爾教授根據(jù)邦孔帕尼整理出版的《計(jì)算之書》進(jìn)行翻譯,翻譯過(guò)程中他采取了“直譯”的方式,沒(méi)有對(duì)譯文進(jìn)行更多加工和修飾,以求保持《計(jì)算之書》拉丁文版本之原貌。2008年,紀(jì)志剛教授及其團(tuán)隊(duì)將上述英譯本譯為漢語(yǔ),并由科學(xué)出版社出版。中譯本中將此算法直譯為“棄某法”,同時(shí)將“棄某數(shù)”全部譯為“留數(shù)”。
④目前我國(guó)居民身份證號(hào)碼、圖書ISBN編號(hào)等的最后一位校驗(yàn)碼主要利用棄十一法進(jìn)行計(jì)算和校驗(yàn)。