牛 騰 鄒大海
(1.中國科學(xué)院自然科學(xué)史研究所,北京 100190;2.中國科學(xué)院大學(xué),北京 100049)
現(xiàn)存文獻(xiàn)中,開方法最早見于《九章算術(shù)》中用算籌進(jìn)行演算的“開方術(shù)”,后經(jīng)劉徽、祖沖之、賈憲、秦九韶等人的發(fā)展,到宋元時期已形成可較為簡便地求任意一元高次方程數(shù)值解的一般方法。珠算盤產(chǎn)生以后,先是發(fā)展出了四則運(yùn)算的各種珠算方法,后來又發(fā)展出珠算開方法。前人對珠算開方法的發(fā)展已有一些較為初步的研究,但還有很多關(guān)鍵問題有待深入探討,籌算開方如何過渡到珠算開方就是其中一個重要問題。由于相關(guān)文獻(xiàn)的描述往往不太明確,所以這個問題又與如何判斷古人描述的開方是籌算開方還是珠算開方的問題交織在一起。華印椿《中國珠算史稿》[1](以下簡稱《史稿》)、李迪主編《中國數(shù)學(xué)史大系 第6卷:西夏金元明》[2](以下簡稱《大系》)、韓祥臨《〈算法統(tǒng)宗〉與珠算》[3]等對判斷標(biāo)準(zhǔn)有總結(jié),但存在一些缺點(diǎn)。這方面的問題非常復(fù)雜,本文只重點(diǎn)審視開平方法從籌算到珠算的過渡。我們發(fā)現(xiàn)有異于傳統(tǒng)籌算開方布局的一類籌算開方法——本文稱為籌算開平方新法*這里所說的新法,并非指運(yùn)算程序上有多大的進(jìn)步,而是指這種籌算開方法與以前的籌算開方法相比,其各項在布局上呈現(xiàn)出新的特點(diǎn),這些特點(diǎn)又出現(xiàn)在后來成熟的珠算開方法中,對于珠算開方法的產(chǎn)生有很關(guān)鍵的作用。,出現(xiàn)在元明算書中,這對于研究這種過渡十分重要。因此,本文將以此為突破點(diǎn),通過對新法和舊法進(jìn)行對比分析,結(jié)合明代中后期其他相關(guān)材料,對籌算開平方到珠算開平方的發(fā)展進(jìn)行較為深入的研究。
這種籌算開平方新法,早在元明之際算書中的就有兩種類型,一種見于賈亨《算法全能集》(具體時間不詳)和丁巨《丁巨算法》(1355年自序)。山崎與右衛(wèi)門等《珠算算法的歷史》[4]、郭書春主編《中國科學(xué)技術(shù)史·數(shù)學(xué)卷》[5](以下簡稱《數(shù)學(xué)卷》)等論著已有提及,但未具體分析其運(yùn)算過程,后者有的說明有不妥之處。另一種類型見于《通原算法》(1372),李儼[6]、華印椿([1],397~398頁)、孔國平和李迪([2],318頁)、郭世榮和郭書春([5],575頁)、勞漢生[7]等對它屬于籌算開平方法還是珠算開平方法持有不同的看法,本文認(rèn)為仍是籌算開平方法。為便于對比,我們先介紹傳統(tǒng)布算的籌算開平方法。
元末明初的算書中只有《丁巨算法》載有傳統(tǒng)布算的籌算開平方法,布算上基本繼承了傳統(tǒng)開平方法的特點(diǎn),但在表述上卻與之前的算書如《透廉細(xì)草》稍有不同。下面以兩書中的傳統(tǒng)籌算開平方法為例對傳統(tǒng)籌算開平方的特點(diǎn)做一介紹。
約成書元代而早于《算法全能集》、《丁巨算法》和《通原算法》的《透廉細(xì)草》*《透廉細(xì)草》現(xiàn)存71題,其中54題1814年由鮑廷博從《永樂大典》部分卷帙中輯出并刻入《知不足齋叢書》的《透廉細(xì)草》殘卷,17題見于現(xiàn)存《永樂大典》卷16343和卷16344中。另外,清莫友芝所錄《諸家算法》中的13題與《知不足齋叢書》中的后13題相同。三種材料都源于《永樂大典》。見鄒大海:《透廉細(xì)草提要》[8]。,內(nèi)有開方問題,其中有開平方細(xì)草的僅存一題,見于《永樂大典》卷16344*滕艷輝錯誤地認(rèn)為《透廉細(xì)草》未單獨(dú)給出開方的具體過程[9],這是因為他沒有看到《永樂大典》中所錄《透廉細(xì)草》的內(nèi)容,不知其中有開平方法細(xì)草。,屬于傳統(tǒng)籌算開方,可與新法對比。該卷相同處下錄有《丁巨算法》,提供一種不同的解法,后面第2節(jié)會予以重點(diǎn)介紹。
《透廉細(xì)草》原題為:
今有平方積五萬五千六百九十六尺,問一面方多少?
答曰:二百三十六尺。法曰:平方開之。[10]
根據(jù)術(shù)文,下面分別用算籌和阿拉伯?dāng)?shù)字說明其運(yùn)算過程(表1)。
表1 用算籌和阿拉伯?dāng)?shù)字展示《透廉細(xì)草》開平方過程
① 《十三、十四世紀(jì)中國民間數(shù)學(xué)》誤作“三”( [6],9 頁) 。② 原文誤作“十”,李儼亦從之( [6],9 頁) ,今據(jù)算理校正為“千”。③ 原文誤作“百”,今從李儼校正為“十”( [6],9 頁) 。④ 原文誤作“二”,今從李儼校正為“一”( [6],9 頁) 。⑤ 原文“六尺”下有“一步”二字,疑因古代六尺為一步而誤衍“一步”,今刪之。
丁巨收集了不少算書來研究算學(xué),在《丁巨算法》*《丁巨算法》原8卷,現(xiàn)存僅90題,有兩個來源。一為清《知不足齋叢書》中的《丁巨算法》殘本,存62題,二為現(xiàn)存《永樂大典》卷16343、16344所錄《丁巨算法》,存28題。另外,《諸家算法及序記》錄有28題,與前者的后28題相同。([5],526頁)自序中稱:“因于算術(shù),上自《九章》,下至小法,數(shù)十百家,摘取要略,述《算法》八卷。”[11]開方法的記載不存于傳本知不足齋本《丁巨算法》殘卷,只見于《永樂大典》卷16344所錄該書。其中除傳統(tǒng)的開方法外,還有新的開方法。書中傳統(tǒng)開平方法只有一例,前人未做具體討論,卻有助于我們進(jìn)行對比研究。
《丁巨算法》原題為:
今有平方積六十二萬二千五百二十一尺,問一面幾何?
答曰:七百八十九尺。[10]
下面對照術(shù)文,分別用算籌和阿拉伯?dāng)?shù)字說明其運(yùn)算過程(表2)。
表2 用算籌和阿拉伯?dāng)?shù)字展示《丁巨算法》傳統(tǒng)籌算開平方法
續(xù)表2
① “倍方法八”是指把方法148 中的8 加倍,加倍以后要往高位進(jìn)一,方法就變成了156,所以下文說“得方法一百五十六”。
結(jié)合兩算書的籌算開平方細(xì)草,本文發(fā)現(xiàn)如下共同點(diǎn):(1)布算分商、實、方、“借算”(本文用“借算”代表隅、隅法或約法等名稱)四項從上至下排列;(2)借用一根算籌確定商的位數(shù)和方法的位置,且“借算”有進(jìn)退位變化;(3)布算中用到“方法”,且有退位變化;(4)每次商數(shù)做乘減運(yùn)算時,不論該商處于哪個位上都只視為一位數(shù)參與運(yùn)算。
除這些共同點(diǎn)外,兩算書還有以下不同之處:(1)對于商數(shù)的擺放:《透廉細(xì)草》各位商數(shù)的位置與被開方數(shù)的相同,即商數(shù)的第n位(按從低到高的順序,下同)在被開方數(shù)的第n位上方;《丁巨算法》各位商數(shù)的位置與“借算”(隅法)相同,因而相對于被開方數(shù)各位的位置來說,商數(shù)的各位是隔位放置的,即商數(shù)的第n位放在被開方數(shù)的第(2n-1)位之上方。(2)在《透廉細(xì)草》中,新得的商先與“借算”(隅法)相乘,再加入上一步的舊“方法”,形成新的“方法”;而在《丁巨算法》中,新得的商產(chǎn)生的那部分“方法”在位置上不是直接而是間接通過由“借算”(隅法)確定的商的位置來確定加入到哪一位的,并且這部分“方法”在乘減之前是直接放入舊“方法”之中的,這里用數(shù)字的直接放置代替了加法運(yùn)算,如“上商八,呼一八生方八。于方法之后,對上商八之下布方法八”。(3)對每一步放置數(shù)字,《透廉細(xì)草》表述為“上商二百尺”、“得二萬為方法”,都明確說明具體的數(shù)值;而《丁巨算法》由于采用上述第(2)項中的定位方式,在描述“商數(shù)”、“方法”時只直接寫出所在位上的數(shù)字,如“上商七”、“布七作方法”中的“七”分別表示“七百”和“七萬”。(4)在對運(yùn)算過程的描述上,《丁巨算法》更詳細(xì),如對其中涉及的乘法運(yùn)算都用相應(yīng)的九九口訣進(jìn)行了說明,如“呼四八三十二,去積三萬二千尺,又呼八八六十四,去積六千四百尺”等;《透廉細(xì)草》只有“命商除實”一句,而不具體描述運(yùn)算的過程。
綜上,以上兩書中開平方的傳統(tǒng)方法基本上延續(xù)了《九章算術(shù)》以來的開平方法的布算特點(diǎn),但對過程的敘述較為詳細(xì),《丁巨算法》尤其如此,這也是當(dāng)時大部分算書中的細(xì)草所共有的特點(diǎn),體現(xiàn)了當(dāng)時數(shù)學(xué)文獻(xiàn)注重實用化和大眾化的傾向。值得注意的是,以上兩算書中傳統(tǒng)籌算開平方法在布算上所具有的某些特征,在元末明初的開平方新法中已不見蹤跡,下面予以具體介紹。
除傳統(tǒng)布算的籌算開平方法之外,《丁巨算法》還記載了一種新的開平方法,布算上與之前有很大不同,《算法全能集》也記載了這種新的開平方法?!锻ㄔ惴ā穭t記載了不同于傳統(tǒng)布算而又異于上述開平方新法的另一種開平方法。下面對這兩種開平方新法進(jìn)行具體的分析和新的闡釋,并澄清以往研究中存在的一些問題。
華印椿先生在提到元代《算法全能集》、《丁巨算法》等算書記錄的開方法時,說它們都有以下特點(diǎn):借一算為下法,以定商位;在運(yùn)算過程中,下法和廉法須分別退位。華先生以此斷定它們都是籌算開方[1],但他沒有注意到兩書都記載了沒有以上特征的新的開平方法。山崎與右衛(wèi)門等[4]雖提到《算法全能集》的開平方法與以前的方法有不同之處,但對不同之處沒有具體說明?!稊?shù)學(xué)卷》稱這種開平方法為一種“試商后直接減積”的開平方法[5],但解說有些不妥之處。本文將對這種開平方新法的布算及運(yùn)算進(jìn)行具體分析和詳細(xì)解釋,表明這種新的開平方法確實可判斷為籌算開平方法,但本文的判別標(biāo)準(zhǔn)與華先生不同。另外,開方法與商除法關(guān)系密切,本文也通過對商除法的分析以輔助說明有關(guān)問題。
《丁巨算法》原題與《透廉細(xì)草》題目相同(見第1節(jié),此處略),但解法不同。下面對照術(shù)文分別用算籌和阿拉伯?dāng)?shù)字兩種方式展示整個運(yùn)算過程(表3)。
表3 用算籌和阿拉伯?dāng)?shù)字展示《丁巨算法》籌算開平方新法運(yùn)算過程
① 原文作“問”,今校改為“商”??赡堋吧獭弊稚习氩繗垞p,之后又被誤識為“問”。
續(xù)表3
① 可能因為第三位商使乘減后沒有余數(shù),作者用了一個簡省的表述,沒再給出細(xì)節(jié)。據(jù)前面的行文習(xí)慣,可將 步驟補(bǔ)全為: “下方亦續(xù)六,又將上下六為六六三十六,又除三百六十。又將上下六為六六三十六,又除三十 六。適盡。”
通過上述布算發(fā)現(xiàn),此開平方法布算分商、實、方三項從上至下排列;沒有“借算”;“方法”沒有退位變化*“方法”由商的位置確定后,不再需要也不能進(jìn)行退位變化了。;每次商數(shù)做乘減運(yùn)算時,都是其本身的數(shù)值參與運(yùn)算。事實上,《丁巨算法》的這種新算法與傳統(tǒng)開平方法相比,只是更側(cè)重于對新產(chǎn)生的商數(shù)和方法之位置做出說明,兩者位置相同,后者由前者決定,如“于上續(xù)商三,下方亦續(xù)三”。又術(shù)文中有“置積在地”、“另于上退二位置二,合商百”等描述,可知是用算籌布算。
賈亨《算法全能集》所載開平方法與《丁巨算法》中的新方法相同,但比《丁巨算法》多了開平方歌訣,這也是目前所見最早記載開平方歌訣的算書,其原文如下:
二十 開平方 謌曰
開方以積使商除,除得其間上置諸。
下另倍為方法數(shù),卻將方倍減其余。
得其次數(shù)上商續(xù),方下傍邊也續(xù)歟。
上下再將續(xù)除積,積之?dāng)?shù)盡自昭如。
若還不盡倍方次,逐一將方位數(shù)除。
除見數(shù)來商又續(xù),只將此續(xù)取空虛。
開方之法有三:有平方,有直方,有立方,其法最難收算,然公私亦少用之。但平方一法,間有用之收算方田一面,不可不載一法于其間也。[12]*此說明文字后所載例題與上述《丁巨算法》中“今有平方積五萬五千六百九十六尺”例題相同,且例解基本一致,如最后“續(xù)商六”之后直接是“以六除,盡”,沒有詳述如何“以六除”的過程。說明《算法全能集》和《丁巨算法》有很大淵源關(guān)系。
通過對歌訣和其下例題開方解法的運(yùn)算過程進(jìn)行比對,可知兩者相符。這說明編寫歌訣的作者熟悉此開方法。另外,該書第17項“丈量田畝”中也有一開平方例題([12],1339~1340頁),解法相同,即使此題的作者與歌訣的作者不是同一個人,也說明此題的作者是了解上述開方法的。
其實,《算法全能集》和《丁巨算法》開平方法“先減積再立商”的特點(diǎn),在當(dāng)時的商除法中就有所體現(xiàn)。《丁巨算法》中有這樣一題:
今有面一百七十二斤零二兩,賣鈔二十五兩五錢。問每兩該面若干?
答曰:六斤一十二兩。
其術(shù)文詳載了商除法的運(yùn)算過程:
此歸除法也。置都斤在地為實,并二兩為一二五在地。以二呼除二六一十二,另置商六。卻于實上二位除五六三十、五六三十。其余數(shù)又呼除二七一十四,續(xù)商七。卻于實上二位除五七三十五、五七三十五。再不盡,又呼除二五一十,續(xù)商五。卻于實上二位又除五五二十五、五五二十五,適盡。又以七五為一十二兩。合問。([11],1312頁)
術(shù)文中“歸除法”,據(jù)其下所載運(yùn)算過程,實為商除法。因為書中第13題的解法中提到“歸除”,正是歸除法,與本題所謂“歸除法”迥異,故原文“歸”很可能是“商”之誤。另一種可能性是,這里的“歸除”只是指明是除法,不一定是指具體計算上與商除相對的歸除。無論如何,這里的除法本身肯定是與歸除法相對的商除法。
術(shù)文中“呼除某數(shù)”再“另置商某數(shù)”或“續(xù)商某數(shù)”的表達(dá)方式正好體現(xiàn)了商除法與上述開平方法中“先減積再立商”的特點(diǎn)。如果上引例子還因為術(shù)文“歸除”二字有疑問的話,那么下引《算法全能集》關(guān)于商除法的歌訣和例題就很清楚了:
商除 謌曰
法使商除把總張,卻將分?jǐn)?shù)作商量。
可除一面除將去,除盡其間數(shù)便當(dāng)。
商除者,商量而除之也。凡遇均分錢物,以合分分?jǐn)?shù)為法,除見合得之?dāng)?shù),另置于上*此處“除見合得之?dāng)?shù),另置于上”與該算書開平方歌訣“除得其間上置諸”剛好對應(yīng)。,以在地數(shù)盡為度。不盡,又從而續(xù)商,故謂之商除?!?/p>
今有軍六百名,分糧三百九十四石二斗,問每人該糧幾何?
答曰:每人該糧六斗五升七合。
法曰:置都糧在地,以六呼除六六三十六,另置商六。余數(shù)又呼除六五三十,續(xù)商五。不盡。又呼除六七四十二,續(xù)商七。恰盡。是數(shù)合問。([12],1324頁)
其中“商除”的稱謂和具體的計算方式與上引《丁巨算法》“此歸除法也”下的計算方式的一致性正好證明了上述結(jié)論。
再如元末安止齋、何平子《詳明算法》(1373年刊本)有關(guān)于商除法的歌訣和解釋:
商除
數(shù)中有數(shù)號商除,商揔*“揔”,同“總”。下同。分排兩位居。
唯有開方須用此,續(xù)商不盡命其余。
……
商除者,商量而除之也,此一術(shù)亦兼九歸、定身除、歸除三法。既通歸除,不必學(xué)此。但開方則必須商除,故不可廢其法。置揔數(shù)商量除訖,卻將所商之?dāng)?shù),別置一位下之,逐位續(xù)商盡而止*“逐位續(xù)商盡而止”,可能是“逐位續(xù)商,商盡而止”之誤,可能流傳過程中“商”字下脫重文號“=”。。有不可盡者,則之命。[13]②*朱希安等認(rèn)為《算法全能集》和《詳明算法》中的商除法是將古法上商、中實、下法的三行式改排為左商、中實、右法的一行式,并稱這是將籌算方法直接搬上算盤的表現(xiàn)[14]。此說法不妥。首先從《詳明算法》的歌訣及對應(yīng)的解釋可知,其布算只有“商”、“總數(shù)”兩項,未見有“法數(shù)”的布算說明;其次,商數(shù)“另置于上”中的“上”字解釋為左邊比解釋為上方需要更多的證據(jù);商數(shù)“別置一位下之”是另外安排一個位置放下算籌來表示商數(shù)的意思,其中“下”字不是指下面,而是動詞,表示放下(算籌)之義,應(yīng)該是指放在上方。即使在左邊,同樣可以是使用算籌,不一定是用算盤。況且如果是用算盤,則商數(shù)在左邊,不能用“下”,只能說“上”字(如果不用“左”字的話)來描述。另外,“則之命”疑當(dāng)作“則以法命之”。
從以上歌訣和例解可看出,元末這三部算書所記載的商除法,都是在運(yùn)算時先心算得商數(shù),但不立即放置,而是先用商數(shù)與法數(shù)相乘,從實數(shù)中減去所得積以后再放置商數(shù)。這與《算法全能集》和《丁巨算法》開平方新法中這一步的運(yùn)算特點(diǎn)一致,可見商除法與這種開平方新法關(guān)系緊密。這也說明,《算法全能集》相關(guān)算題的作者確實了解這種新的開平方法。
《數(shù)學(xué)卷》稱:
此方法中初商和次商都是直接將試商的平方從實數(shù)中減去,而且次商是用方法與余實商除而得,朱載堉與程大位等人的歸除開平方法與此極為相似。[5]
本文的看法有所不同。首先,朱載堉與程大位的歸除開平方法中初商均由口訣求出,實際操作時前者先立“下法”(《算法全能集》和《丁巨算法》稱之為“方法”),然后用歸除口訣,在得到商數(shù)的幾乎同時,從實數(shù)中減去了商數(shù)的平方,這也是歸除法的特點(diǎn);程氏先在實數(shù)的左邊和右邊分別放置初商與等于初商的數(shù)(稱為“方法”),然后從實數(shù)中減去初商和方法的乘積。其次,朱、程歸除開平方法求次商亦均采用歸除法,這也是歸除開平方法與商除開平方法最大的不同。
總之,《算法全能集》、《丁巨算法》中開平方新法的產(chǎn)生與當(dāng)時商除法的改革密切相關(guān)。與傳統(tǒng)籌算開平方相比,新法簡化了不少步驟,如布算上不僅少置“借算”一項,而且也不需要將方法退位、移動算籌,這既節(jié)省了步驟也減少出錯的機(jī)會*方法退一位時,數(shù)值縮小到1/10,嚴(yán)格地說需要把算籌的縱式變成橫式、橫式變成縱式,這會增加出錯的機(jī)率;但不做改變也對計算沒什么影響,沒有材料說明古人是否嚴(yán)格地做這種改變。?!锻ㄔ惴ā份d有與之相似的另一種籌算開平方新法,但兩者在布算和運(yùn)算過程上還是有很多不同之處。
嚴(yán)恭《通原算法》2卷,原書不傳,現(xiàn)存僅64題,其中29題存于《諸家算法》,35題存于《永樂大典》。([6],25~43頁)洪武壬子年(1372)潮州府趙瑀序說,嚴(yán)氏自稱在元朝時曾收集一些數(shù)學(xué)書,因元末兵亂而散失;他在明初“默集”而編寫是書,以補(bǔ)算書之缺失。([10],1455頁;[5],531頁)那么,《通原算法》所載開平方法或許在元末之前就已存在。有細(xì)草的開平方題目現(xiàn)存兩題,見于《永樂大典》卷16344。
前人對《通原算法》中開方所用工具是算籌還是算盤有不同意見。李儼曾對書中的開平方法用籌算加以解說,其算籌圖式中有“下隅”的退位變化[6],其實并無退位。華印椿說此書開平方不用借籌定位,運(yùn)算時也不做退位處理,書中找不到籌算的證據(jù),進(jìn)而否定李儼關(guān)于是籌算開方的判定,而改判為珠算開平方法。([1],397~398頁)勞漢生與華氏的看法相同,依據(jù)也相同。[7]孔國平在李迪主編的《大系》中提到,《通原算法》中載有籌算開平方、開立方法。([2],318頁)《數(shù)學(xué)卷》介紹了《通原算法》的開立方法,也認(rèn)為它屬于籌算開方。([5],574~575頁)下面我們首先對《通原算法》開平方細(xì)草進(jìn)行具體分析,而后對所用算具做出新的判斷。
《通原算法》開平方術(shù)文中有“借一筭,步之超一等”,雖然“借算”(原書下文中稱為“下隅”)在后面的運(yùn)算中沒有退位變化,但一直參與運(yùn)算,如“上商二百乘下隅為廉二百”、“續(xù)上商六十,乘下隅為廉六十于四百之下”,可見運(yùn)算過程中確實借一算籌作為“下隅”項而占用一行布算,并有進(jìn)位變化。這可說明其開方法用算籌布算的可能性最大。
《通原算法》原題為:
今有積七萬一千八百二十四步,問為方幾何?
答曰:二百六十八步。([10],1417頁)
下面依照原文分別用算籌和阿拉伯?dāng)?shù)字兩種方式展示整個運(yùn)算過程(表4)。
表4 用算籌和阿拉伯?dāng)?shù)字展示《通原算法》開平方過程
續(xù)表4
嚴(yán)敦杰認(rèn)為此書可能用到珠算,否則不會用“呼”、“再呼”等詞。[15]其實,《算法全能集》、《丁巨算法》等書中的開平方法也用“呼”字。九九歌訣至遲在戰(zhàn)國時代就已存在,元明之際算法歌訣化盛行,又屬于算籌和算盤并存的時代,使用算籌時說“呼”字也很正常,單憑“呼”字至少不能判斷上述開方為珠算開方。由于有商、實、方法、廉、借算(下隅)五項,又用“上”、“下”指明置數(shù)位置,因此這里開平方所用工具當(dāng)屬算籌無疑。
根據(jù)表4所示,《通原算法》中的開平方法,與傳統(tǒng)布算的籌算開平方法相比有以下不同點(diǎn):(1)有“借算”,但無“借算”的退位變化。這點(diǎn)上我們與李儼的看法不同,因為原文除“借一筭,步之超一等”以外,并未提到“下隅”的其他位置變化,若依照傳統(tǒng)開平方算法加上“下隅”的退位變化,則沒有任何意義,反而使運(yùn)算步驟更加繁瑣。(2)整個開平方過程中沒有方法及廉的退位變化,在進(jìn)行下一步置商之前,廉位上的數(shù)字在加倍并入方法的時候,就清空了。
本文還發(fā)現(xiàn),《通原算法》開平方法中的“借算”僅起到確定商數(shù)的位數(shù)的作用,并沒有確定商數(shù)、方法、廉法之位置的作用。雖然運(yùn)算過程中沒有了復(fù)雜的退位變化,但嚴(yán)恭開平方法布算用到5層,未免繁瑣。另外,傳統(tǒng)布算的籌算開平方法中,方法乘商以減積或余積時,商數(shù)往往不帶位值而乘[16],而《算法全能集》、《丁巨算法》以及《通原算法》所載開平方新法中的商數(shù)在參與運(yùn)算時明顯是帶有位值涵義的。
上面對元末明初《算法全能集》、《丁巨算法》、《通原算法》三部算書開平方法的分析,說明它們在敘述上有各自的特點(diǎn),其中開平方新法與傳統(tǒng)的籌算開平方法相比,在布算上出現(xiàn)了很大的變革。下面將以《透廉細(xì)草》為代表的傳統(tǒng)籌算開平方法與上述三部算書中的籌算開平方法進(jìn)行布算上的對比(表5),以便對籌算開平方法的特點(diǎn)進(jìn)行新的分析。
表5 四種算書(現(xiàn)存內(nèi)容)中開平方法的布算特點(diǎn)分析
① 原文中稱為“約法”、“常隅”、“下法”或“隅法”。② 原文中稱為“隅”或“隅法”。 ③ 原文中稱為“下隅”。
根據(jù)表5,籌算開平方法在布算上有以下共同點(diǎn):皆為縱式排列;必有商、實、方三層,多者達(dá)五層。另外,這些開方問題都屬于商除開方法,與商除法的發(fā)展密切相關(guān),而與歸除法沒有關(guān)系。這一時期既有傳統(tǒng)籌算開平方法,又出現(xiàn)了至少2種籌算開平方的新法。新法的共同特點(diǎn)是沒有方法(廉、隅)的退位變化。《算法全能集》和《丁巨算法》中的開平方新法,只有商、實、方三項分三層布算(以下簡稱此法為“三層新法”),《通原算法》的開平方新法在開始時有借算的進(jìn)位變化,但完成確定商數(shù)之位數(shù)的功能后,轉(zhuǎn)化成了下隅,也沒有退位變化了?!锻ㄔ惴ā返拈_平方新法布算用到五層(以下簡稱此法為“五層新法”),多了廉、下隅二項,且從商第二位數(shù)起都要置廉,這仍顯繁瑣。所以五層新法較之三層新法要原始一些。從算理上講,傳統(tǒng)籌算開方可能先發(fā)展到五層新法,然后改進(jìn)到三層新法(趙序《通原算法》的年份不見得是五層新法的初創(chuàng)時代),它們都處于改革籌算開方的階段。
下面將上述籌算開方新法與后來出現(xiàn)的珠算商除開方法進(jìn)行比較,可以發(fā)現(xiàn)兩者有很多相似之處,這為我們認(rèn)識珠算開平方法的產(chǎn)生與發(fā)展提供了新的視角。
珠算開平方分為商除開平方和歸除開平方,前者明顯是繼承籌算開平方法而來,而在文獻(xiàn)中我們也沒有發(fā)現(xiàn)與珠算歸除開方法對應(yīng)的籌算歸除開方法。所以,這里我們重點(diǎn)介紹珠算商除開平方法,分析其特點(diǎn),以說明它與籌算開平方法的不同類型之異同。
現(xiàn)有材料中,明代王文素《算學(xué)寶鑒》(1524)已出現(xiàn)看似是珠算開方的商除開平方法,但沒有明確說明運(yùn)算工具。我們通過分析書中描述開方過程的文字和圖式,可知屬于籌算開方(我們另文做專門討論)。明確屬于珠算商除開平方的材料見于余楷《一鴻算法》(1585年刊印完成)、程大位《算法統(tǒng)宗》等書中。因《算法統(tǒng)宗》所著珠算商除開平方法較為詳細(xì)、全面,且有與上述籌算開平方新法相類似的方法,而開平方例解中又明確所用計算工具為算盤,還詳載運(yùn)算圖式,所以本文以此書為例介紹珠算商除開平方法及其特點(diǎn),在此基礎(chǔ)上討論珠算商除開平方法與籌算開平方新法之間的關(guān)系。
程大位在編寫《算法統(tǒng)宗》時“參會諸家之法”,直接參考過的著作有40種左右([5],560頁),包括吳敬《九章算法比類大全》(1450)和余楷《一鴻算法》[17],其中開平方的很多內(nèi)容也有參考過前人著作的痕跡。該書載有“開平方法認(rèn)商歌”:
開平方法認(rèn)商歌
一百一十定無疑,一千三十有零余。
九千九九不離十,一萬才為一百推。
得商方除倍作廉,次商名隅并廉除。
余數(shù)續(xù)商隅又倍,只依此法取空虛。([17],1308頁)
前四句是對求初商數(shù)值的一般說明,與《九章比類》“開平方法”歌訣[18]和《一鴻算法》“開平方認(rèn)商歌”[19]中的前四句都基本相同;后四句是對商除開平方法運(yùn)算過程的說明。其中“一百一十定無疑”、“一萬才為一百推”相當(dāng)于開平方法中的“言百之面十,言萬之面百”。
隨后又有“開平方初商定首位訣”
開平方初商定首位訣,是自乘之?dāng)?shù)也。
商一步,積一步;商一十步,積一百步;
商二步,積四步;商二十步,積四百步;
……
商九步,積八十一步;商九十步,積八千一百步。([17],1308頁)
接下來給出具體的開平方法(為便于下文分析,記為“訣”下開方法):
法曰:置積為實。別置一筭,名曰下法,于實數(shù)之下。自末位至首,常超一位。約實。一下定一,(千)*原文“百”字前有“千”,郭世榮亦從之[20]。據(jù)算理,此“千”字為衍文,今刪之。百下定十,萬下定百,百萬下定千。實上商置第一位得若干,下位亦置上商若干,名曰方法。與上商相呼,除實若干,余實若干。乃以二乘方法即倍法也,得若干為廉法。續(xù)商置第二位于上商之次,得若干,下法亦置續(xù)商若干,為隅法,于倍方之次,共若干,皆與續(xù)商相呼除實,盡,得平方一面數(shù)。如不盡,仍前再商之。([17],1308頁)
上引開平方“法曰”下的文字,在表述上與籌算開方法基本相同,如“實數(shù)之下”、“實上”、“下位”、“上商”等詞的使用,以及對“借算”的說明:“別置一筭,名曰下法,于實數(shù)之下”。郭世榮認(rèn)為此處講述珠算開方術(shù),“別置一筭”系借用籌算開方術(shù)語,這“一筭”其實是虛置,在算盤上并不顯示([20],243頁)。如果按《算法統(tǒng)宗》卷1“用字凡例”中所說“上脊梁之上,又位之左”,“下脊梁之下,又位之右”([17],1230頁),那么這一理解也是有道理的。但是,“上”、“下”畢竟可以不針對算盤而言,按通常的意義分別表示上方、下方。比如,同頁說“大圈之下小圈,乃暗子馬數(shù)”,就是講右邊一豎列符號中,含有大圈的符號下面的小圈內(nèi)的符號是暗子馬數(shù)。所以,嘗試不按珠算開方來理解上面的方法也是完全可以。
我們發(fā)現(xiàn),如果按籌算來理解反而更合適。首先,如上面已經(jīng)談到的,其文字本身是算籌開方的表述。其次,在上引“法曰”文字之后不遠(yuǎn)處,有“方廉隅法之圖”,用以說明用分割正方形來展示開平方的道理。其下有一個開平方的問題(記為“圖”下開方法)作:
平方積三百二十四
法曰:置積三百二十四步為實?!鸺s初商一十步于實左,下法亦置一十步于實右,名曰方法,與上商相呼,一一除實一百步,余實二百二十四步。就以方法一十步,倍之得二十步,名曰廉法?!鹩旨s次商八步于左初商一十之次,共得一十八步。亦置八步于實右廉法二十步之次,名曰隅法,共得二十八步,與左位次商八步相呼,二八除實一百六十步。又左八對右八相呼,八八除實六十四,恰盡。得方面一十八步。([17],1309頁)
這里只用“左”、“右”,完全不用“上”、“下”來表示方位(不考慮作為專門術(shù)語的“下法”),對比“訣”下開方法的文字中只用“上”、“下”,可謂涇渭分明。因此可以推論,與“圖”下開方法不同,“訣”下開方法描述的是籌算開平方法:(1)分商、實、方法、廉法、下法(隅法)五層(亦可能是四層,在計算過程中方法改稱廉法);(2)方法、廉法、下法沒有退位變化,下法只在開始有進(jìn)位變化,用以確定首商在哪一位。對比前面所論籌算開方新法,可以看出,這里的開方法與之同類,且更接近五層新法。
“圖”下開方法從左至右排列三項,中間為實(被開方數(shù)),左邊為商,右邊為法:初名下法,后名方法、廉法,三個名稱只是一項,最后的隅法與廉法合成一項(亦可能是在廉法與新加入的數(shù)合成后改名隅法)。這是珠算開平方法,其左中右三項與籌算三層新法的上中下三層相對應(yīng),但前者中實右邊的那項有下法、方法、廉法等名稱的變換,而后者中實下面的那項始終只有方這一個名稱。從用語上看,這種珠算開平方法與籌算五層開平方法有更接近的地方,但前者的同一項有多個名稱,而后者本來就是幾項以不同的名稱分置于不同的層。所以從本質(zhì)上講,這種珠算開平方法與前面所說的三層新法更接近。
元末明初的開平方新法和上述《算法統(tǒng)宗》“訣”下開方法,都是對傳統(tǒng)籌算開方進(jìn)行改革的例證,“圖”下開方法雖為珠算開平方法,也反映了這種改革的蹤跡。這些例證在布算層數(shù)、用語、計算順序、是否進(jìn)退位上互有異同,而沒有兩個是完全相同的,展示了這種改革的多樣性。但無論如何,它們都有一個共同點(diǎn):沒有退位的變化。正是這一特點(diǎn),為籌算開方過渡到珠算開方清除了很大的障礙。
上述“圖”下開方法雖為珠算開方法,但在表述上還遺留著籌算開方法的一些痕跡,而下面圍棋問題中的珠算開平方法,其陳述則很成熟了。這個問題是:
假如今有圍棋盤,共子三百六十一個,問每面子若干?答曰:每面一十九個。([17],1309~1310頁)
其解法分兩部分,第一部分為緊接在答案后的文字描述,我們用算盤圖示直觀解釋原文(如表6)。
表6 用算盤展示《算法統(tǒng)宗》開平方過程
解法的第二部分是,用文字性的計算圖式列出“開平方法定分左中右式”(圖1)。這部分有廉法、隅法,而第一部分原文沒有,在表6算盤圖示中我們標(biāo)出的“廉法”、“廉”、“隅”是據(jù)第二部分添入的。對于用算盤進(jìn)行具體計算來說,添入這些文字并非必須。第二部分用方法、廉法和隅法進(jìn)行說明,從計算本身來說也是不必要的,正如前面的三層新法一樣。但程氏仍用這樣術(shù)語,能更好地呼應(yīng)前面的“方廉隅法之圖”以展示開平方法的道理。
圖1 《算法統(tǒng)宗》圍棋題([17],1309~1310頁)
可以看出,相比于傳統(tǒng)的籌算開平方法,《算法統(tǒng)宗》的珠算開平方法有以下幾個特點(diǎn):(1)沒有“借算”;(2)沒有方法及廉隅的退位變化;(3)只列商數(shù)、實數(shù)、下法三項數(shù)據(jù);(4)三項數(shù)據(jù)在算盤上按從左至右的順序排列;(5)在敘述上對運(yùn)算過程的描述比較詳細(xì),如對其中涉及的乘法運(yùn)算都用相應(yīng)的九九口訣進(jìn)行了說明。這5個特點(diǎn)中,第1點(diǎn)正是《算法統(tǒng)宗》珠算開平方法與上述籌算開平方的三層新法之共同點(diǎn),第2點(diǎn)則是它與上述各種籌算開平方新法的共同點(diǎn),第5點(diǎn)也與籌算開平方新法相似,第3點(diǎn)與三層新法的特征相同??梢哉f,如果不考慮算具之別,上述珠算開方法和籌算開方新法的區(qū)別關(guān)鍵在于數(shù)據(jù)的排列是左右橫向排列還是上下縱向排列。
《算法統(tǒng)宗》的珠算開平方法與傳統(tǒng)籌算開平方法差距很大卻非常接近籌算開平方新法,這反映出其珠算開平方法由籌算開平方新法直接改造而來,而非直接改自傳統(tǒng)籌算開平方法。前人對此沒有清晰的認(rèn)識,故而常常忽略籌算開平方新法,僅對珠算開平方法與傳統(tǒng)籌算開平方法進(jìn)行分析,因而得出了一些片面的結(jié)論。下面對此再做分析。
對籌算開平方法與珠算開平方法的不同點(diǎn),華印椿《史稿》[1]、韓祥臨《〈算法統(tǒng)宗〉與珠算》[3]和李迪主編《大系》(這部分亦由韓祥臨執(zhí)筆)[2]做過分析和總結(jié)。華先生還稱,按照他對兩種開方法特點(diǎn)的分析,可以鑒定元、明算書中記錄的開方屬于籌算還是珠算。由于沒有注意到元末明初以來著作中的籌算開平方新法,他們對籌算開平方法特點(diǎn)的分析比較片面,以致其判斷籌算開方和珠算開方的標(biāo)準(zhǔn)也比較片面、不太客觀?,F(xiàn)將三種文獻(xiàn)所總結(jié)出的籌算開平方法和珠算開平方法之不同點(diǎn)與實際不符之處列出,如表7:
表7 華、韓、李論著所列籌算開平方與珠算開平方法的不同點(diǎn)與不符之處
① 華判為珠算開方的《通原算法》開平方法有5 項,與他所列珠算用3 項的標(biāo)準(zhǔn)相矛盾。
續(xù)表7
可見,這些著作對籌算開平方法特點(diǎn)的總結(jié)并不全面而準(zhǔn)確,其標(biāo)準(zhǔn)無法對各算書中開平方法所用工具究竟是算籌還是珠算盤做出正確的判斷。需要說明的是,一般所說的籌算開平方法和珠算開平方法很大程度上指的是開方的主體布算(布置各項)所用算具為算籌還是珠算盤,前者并不排除開方運(yùn)算的主體上用算籌布算而某些中間環(huán)節(jié)用珠算的可能,畢竟最遲宋代已出現(xiàn)和現(xiàn)在形制一樣的算盤,大量算法歌訣的出現(xiàn),也使得珠算加減乘除法運(yùn)算速度比籌算更快。所以,對于籌算開平方法和珠算開平方法的判定標(biāo)準(zhǔn)需要更細(xì)致的分類和更全面的分析。
目前看來,籌算開平方法與珠算開平方法在布算上最大的不同就是,前者的布算是各項用算籌從上至下排列,而后者則在一橫行內(nèi)從左至右排列各項*日本吉田光由《塵劫記》(1627)中有將籌算開方法各項數(shù)字直接用多個算盤來表示而形成的珠算開方法[21],是籌算開方過渡到珠算開方的一種最直接且最簡單的原始過渡形式。這種形式在中國也可能產(chǎn)生過,但現(xiàn)存中算著作中的珠算開方法都是各項在算盤上從左至右進(jìn)行排列,而我們關(guān)注的是不那么容易判斷的開方文獻(xiàn),所以本文所說珠算開方暫不包括這種情形。。在表達(dá)上,如果古人明確指出是用籌算開方或珠算開方,或明確表達(dá)出布算是上下排列還是左右排列,則可以很容易判斷是籌算開方還是珠算開方法。如果沒有這樣明顯的文字說明,但在描述運(yùn)算過程時,有很明確的上下位置說明,或清楚地描述了某些項的進(jìn)位或退位變化,特別是有下法(方、廉、隅)的退位變化,那么至少也可以確定總體布局上是籌算開方;而如果沒有這種說明,那么是珠算開平方的可能性就很大了。但對于總體上是籌算開方的情形,亦存在珠算參與某些步驟的可能性:(1)如果被開方數(shù)的位數(shù)不多,數(shù)字不大,此時各步的計算簡單,沒有必要更換計算工具,因此珠算參與的可能性極??;(2)如果數(shù)據(jù)很大,各步的計算很麻煩,特別到16世紀(jì)或以后,則可能有珠算參與。
有檔穿珠的算盤最遲在宋代已經(jīng)產(chǎn)生,像加、減這類簡單的運(yùn)算可直接移植到算盤上操作,乘、除這類復(fù)雜一些的運(yùn)算在經(jīng)過了算法改革后,也容易在算盤上實現(xiàn)。開方屬于復(fù)雜的運(yùn)算,以傳統(tǒng)的籌算開平方法為例,最少用4層布算,其中實以下的各項在運(yùn)算過程中還有進(jìn)退位變化,若用算盤實現(xiàn)更是困難。因此,籌算開方(特別是傳統(tǒng)的籌算開方法)過渡到珠算開方的過程不能簡單地從算籌的幾層縱式排列直接過渡到算盤上多項一行的橫式排列。而較之傳統(tǒng)籌算方法,把元末以來的籌算開平方新法移植到算盤上用一行橫式進(jìn)行操作,則要容易得多。
《算法全能集》、《丁巨算法》中的開平方新法布算只有3項,去掉了傳統(tǒng)布算中的“借算”一項,省略了方法的退位變化等過程,在布算上比較簡潔,這與后來的珠算開平方法非常相似。用算盤模擬其運(yùn)算過程時,只要忽略其中對各項上下位置的說明,將它們從左至右在算盤上排列即可。但該方法在敘述中沒有說出每個數(shù)值的大小,只側(cè)重描述各項所在位上的數(shù)字,這在算籌布算上比較容易確定各項的數(shù)值,對于數(shù)目較小的開平方來說在算盤上實現(xiàn)也沒有難度,但對于數(shù)目較大的開平方運(yùn)算來說,可能會增加運(yùn)算的難度。
嚴(yán)恭《通原算法》中的開平方新法,在運(yùn)算過程中有“借一筭,步之,超一等”,古人在算盤上操作時可用心算替代這一步,如王文素《算學(xué)寶鑒》中的“平方商,覓根因,逆數(shù)常超一位尋。一定一兮百定十,萬中商百記于心”[22]提供了證據(jù)。雖然《通原算法》中“借算”在后面的運(yùn)算中一直參與運(yùn)算,但因所取“借算”的值為1,后面每項乘以“借算”后,數(shù)值并未發(fā)生改變,所以這一步可以省略,在過渡到珠算開方時沒有什么困難。該方法對每一步放置數(shù)字也都明確說明了具體數(shù)值,因此其余步驟亦均可在算盤上實現(xiàn)。但有唯一的缺點(diǎn)就是5層縱式布算,項數(shù)太多,如果要移植到算盤上需要在一橫行上放置5項數(shù)據(jù),這要求算盤的檔位很多,且不利于觀察,從而會使運(yùn)算顯得繁瑣而容易混淆。
《算法統(tǒng)宗》中“訣”下開方法,也是一種異于傳統(tǒng)布算的籌算開平方新法。類似的方法還見于更早的唐順之(1507~1560)《武編》*郭一鶚為《武編》寫的序言說:“得是編熟之化之,天下無勍敵矣!荊川先生熟而化此,以南剿倭、北創(chuàng)虜,十用其七八”[23],似乎《武編》在唐順之1555年復(fù)出參加抗倭[24]之前已成書。。書中針對營陣問題,有一個普遍性的開方法:
方營法:置積數(shù)為實,別置一算,為下法,從末常超一位定實。實上商置第一位得數(shù),下法亦置上商,名曰方法。乃命上商除積,至盡而止。不盡,乃倍方法,為廉。于上商之次,續(xù)商第二位得數(shù),廉法之次,照上商置隅。以廉、隅二法命上商除積,得盡而止。不盡,乃陪*“陪”通“倍”,或為“倍”之誤[25]。隅法,并為廉。又于上商置第三位得數(shù),廉法之次,照上置隅。以廉、隅二法,皆命上商,除積,至盡而止。不盡,如法命之。([23],370~371頁)
此法與《算法統(tǒng)宗》、《通原算法》的籌算開平方法相出入。書中還有一個算例([23],374~375頁),更接近《算法統(tǒng)宗》的籌算開平方法。它們與元末明初算書中的籌算開平方新法都屬于革新傳統(tǒng)籌算開平方而成的新法,當(dāng)有更早淵源,其產(chǎn)生可能也在元明之際或前后不遠(yuǎn)。5種大同小異的籌算開平方新法,說明在珠算逐漸流行開來的時代,對籌算開方的改革不是個別人的行為,而是一種趨勢,正是這類籌算開平方新法為珠算開平方提供了基礎(chǔ)。《算法統(tǒng)宗》中先有這種新法,之后給出珠算商除開平方法,說明兩者有密切聯(lián)系。后者具有以下特點(diǎn):(1)不用“借算”一項;(2)布算分商、實、方三項(清初《算海說詳》增加只列商、實兩項的珠算開平方新法);(3)商、實、方各項在運(yùn)算過程中都沒有進(jìn)位(或退位)變化;(4)運(yùn)算過程中的各項均有數(shù)值說明;(5)對其中涉及的乘法運(yùn)算都用相應(yīng)的九九口訣進(jìn)行了說明;(6)先放置商數(shù)等項,再減積或減余積。其中(1)、(2)、(3)、(5)是區(qū)別于元末以前的傳統(tǒng)籌算開平方法的特點(diǎn),(1)、(2)、(3)、(4)是成熟的珠算商除開平方法必須具有的特點(diǎn),(6)是現(xiàn)存珠算商除開平方法都具備的特點(diǎn)。而(1)、(2)、(3)、(5)在《算法全能集》、《丁巨算法》中的三層籌算開平方新法中已經(jīng)具備,(3)、(4)、(5)、(6)在《通原算法》中的五層籌算開平方新法中已具備。傳統(tǒng)籌算開平方法中則不具備這些特點(diǎn)。所以,珠算商除開平方法應(yīng)該是從改革后的籌算開平方新法過渡而來。
現(xiàn)在要估計一下珠算歸除開平方法和商除開平方法的時代?!端惴ńy(tǒng)宗》、王肯堂《郁岡齋筆麈》(1602年自序)等介紹歸除開方法時都說是新增此法,且都屬于珠算歸除開方法,說明此法產(chǎn)生不久。雖然目前所知,載有歸除開立方法且已出版的最早算書是《算法統(tǒng)宗》[17],但刊刻此書的1592年肯定不是此法產(chǎn)生的時間。朱載堉《算學(xué)新說》載有珠算歸除開平方法,并說“夫算學(xué)之有書,其亦舊矣,謂之新說,何也?……平方不用商除,立方不顯廉法之類,舊則繁而新則簡”[26]。朱氏另一本著作《嘉量算經(jīng)》(1610)中也稱:“用歸除開平方,各算書未載,是故詳載之”[27]。兩書都認(rèn)為是他自己首先采用歸除開方法的?!端銓W(xué)新說》雖刊于1603年,但《律學(xué)新說》(1584年序)卷2說“古所謂黃鐘空圍九分者,即算家所謂內(nèi)周也?!詽h已來……至今莫覺其誤。臣于《律書·周徑》篇中論之詳矣,除已見《律書》及《算學(xué)新說》,茲不復(fù)載”[28],華印椿([1],80頁)、郭世榮和郭書春([5],551頁)、李培業(yè)[29]、勞漢生([7],92頁)等學(xué)者推測《算學(xué)新說》寫于1584年。其實1584年并不是撰寫此書的時間下限。戴念祖考證其成書不晚于公元1581年,不早于1567年[30],則書中的歸除開平方法的產(chǎn)生不晚于1581年。如考慮到書中的內(nèi)容可能在成書之前,所以1567年也不一定是歸除平方法的最早時代。但朱載堉生于1536年,到1550年才14歲,因此朱氏歸除開平方法應(yīng)該在1551~1581年之間,而很可能在16世紀(jì)六七十年代(24~43歲)。珠算歸除開方法應(yīng)該是將歸除法和珠算商除開方法相結(jié)合發(fā)展起來的,所以珠算商除開平方法應(yīng)該更早。鑒于顧應(yīng)祥《測圓海鏡分類釋術(shù)》(1550)、《弧矢算術(shù)》(1552)、《測圓算術(shù)》(1553)中均載有珠算開帶從方法,周述學(xué)《神道大編歷宗算會》(1558)中除了載有珠算開帶從方法還有珠算開三乘方法,我們估計珠算商除開平方法的產(chǎn)生不應(yīng)晚于16世紀(jì)上半葉,而可能更早。有的學(xué)者認(rèn)為王文素《算學(xué)寶鑒》已經(jīng)有之,但我們不能肯定。無論如何,我們可以大致勾勒出從籌算開平方過渡到珠算開平方的大致脈絡(luò)如下:
傳統(tǒng)的籌算開平方——籌算開平方新法(《通原算法》所載的五層新法,《算法全能集》和《丁巨算法》所載的三層新法,《武編》中的三層和五層新法,《算法統(tǒng)宗》的五層新法等。這些書中的新法至少有部分源于更早的時代)——珠算商除開平方法——珠算歸除開平方法。
唐中葉以來為了簡化計算,對籌算乘除法進(jìn)行改進(jìn),主要表現(xiàn)在兩個方面:一是化三層布算為一層或兩層布算,二是化乘除為加減運(yùn)算。([5],400~401頁)現(xiàn)存文獻(xiàn)中,直到元末才有對傳統(tǒng)籌算開方法的改進(jìn),實際的時間可能會早一些,書中的這些內(nèi)容可能取自以前的著作。如在布算上,《算法全能集》和《丁巨算法》中的開平方新法,布算只有3層,沒有“借算”,沒有“方法”的退位(或進(jìn)位)變化;明初《通原算法》的開平方法,布算多達(dá)5層,可能源自嚴(yán)恭早年收集的算書。這幾種算書中的開方新法,在運(yùn)算過程中都沒有方法、廉法、隅法的退位變化。它們與后來的《算學(xué)寶鑒》、《武編》和《算法統(tǒng)宗》中的籌算開平方新法,反映了元后期以來籌算開平方改革在細(xì)節(jié)上具有多種可能,但它們的一個共同點(diǎn)是沒有退位變化,這是籌算開平方走向珠算開平方的關(guān)鍵一步。
籌算開平方新法在對乘減運(yùn)算過程的描述中都出現(xiàn)了九九口訣(有的帶“呼”字),詳細(xì)列出各項相乘的先后順序以說明開方過程中的乘減運(yùn)算采用前乘法,這或許為了表明要區(qū)別于當(dāng)時已經(jīng)出現(xiàn)的后乘法,也可能僅僅方便讀者掌握每一步運(yùn)算程序。而現(xiàn)存算書中所記載的珠算開平方法也普遍有這一特點(diǎn)。
珠算開方法區(qū)別于籌算開方法的顯著特點(diǎn)是,將用算籌從上至下排列各項的方式,改為在算盤上從左至右在一橫行上排列各項。當(dāng)沒有明文說明所用算具時,如果有很明確的上下位置說明,或清楚地描述了某些項的退位變化,特別是有法(方、廉、隅)的退位變化,那么至少也可以確定開方的總體布局上是籌算,否則是珠算的可能性就很大了。
籌算開平方新法遠(yuǎn)比傳統(tǒng)籌算開平方法更適合移植到算盤上用一行橫式實現(xiàn),其中三層新法尤其適合改造成珠算商除開平方法,其時間應(yīng)不晚于16世紀(jì)上半葉,而可能更早。歸除開平方法大約產(chǎn)生于16世紀(jì)六七十年代,朱載堉很可能是這一方法的首創(chuàng)者,或至少是一個先驅(qū)。從算理上講,珠算開平方很可能經(jīng)歷了傳統(tǒng)籌算開平方法到籌算開平方新法,到珠算商除開平方法,再到珠算歸除開平方法的發(fā)展歷程。
致謝本文修改稿吸收了審稿專家提出的寶貴意見,謹(jǐn)致謝忱。
1 華印椿. 中國珠算史稿[M]. 北京: 中國財政經(jīng)濟(jì)出版社, 1987. 396~397.
2 李迪. 中國數(shù)學(xué)史大系 第6卷 西夏金元明[M]. 北京: 北京師范大學(xué)出版社, 1999. 403.
3 韓祥臨. 《算法統(tǒng)宗》與珠算[J]. 湖州師范學(xué)院學(xué)報, 1999, 21(6): 28~36.
4 山崎與右衛(wèi)門, 戶谷清一, 鈴木久男. 珠算算法の歴史[M]. 東京: 森北出版株式會社, 1958. 438~440.
5 郭書春. 中國科學(xué)技術(shù)史·數(shù)學(xué)卷[M]. 北京: 科學(xué)出版社, 2010. 574.
6 李儼. 十三、十四世紀(jì)中國民間數(shù)學(xué)[M]. 北京: 科學(xué)出版社, 1957. 54~55.
7 勞漢生. 珠算與實用算術(shù)[M]. 石家莊: 河北科學(xué)技術(shù)出版社, 2000. 231~232.
8 鄒大海. 透廉細(xì)草提要[M]//中國科學(xué)技術(shù)典籍通匯·數(shù)學(xué)卷. 第1分冊. 鄭州: 河南教育出版社, 1993. 1281.
9 滕艷輝. 《透廉細(xì)草》內(nèi)容分析與評價[J]. 廣西民族大學(xué)學(xué)報(自然科學(xué)版), 2010, 16(3): 26~28, 33.
10 永樂大典算法[M]//中國科學(xué)技術(shù)典籍通匯·數(shù)學(xué)卷. 第1分冊. 鄭州: 河南教育出版社, 1993. 1419~1420.
11 丁巨. 丁巨算法[M]//中國科學(xué)技術(shù)典籍通匯·數(shù)學(xué)卷. 第1分冊. 鄭州: 河南教育出版社, 1993. 1301.
12 賈亨. 算法全能集[M]//中國科學(xué)技術(shù)典籍通匯·數(shù)學(xué)卷. 第1分冊. 鄭州: 河南教育出版社, 1993. 1345.
13 安止齋, 何平子. 詳明算法[M]//中國科學(xué)技術(shù)典籍通匯·數(shù)學(xué)卷. 第1分冊. 鄭州: 河南教育出版社, 1993. 1370.
14 朱希安, 葉宗義. 當(dāng)代中國珠算[M]. 北京: 中國財經(jīng)出版社, 2000. 52.
15 嚴(yán)敦杰. 關(guān)于明初刊本的《通原算法》[C]// 梅榮照. 明清數(shù)學(xué)史論文集. 南京: 江蘇教育出版社, 1990. 21~25.
16 段耀勇. 籌式開方中借算的位置[J]. 內(nèi)蒙古師范大學(xué)報(自然科學(xué)漢文版), 2000, 29(4): 321~324.
17 程大位. 算法統(tǒng)宗[M]//中國科學(xué)技術(shù)典籍通匯·數(shù)學(xué)卷. 第2分冊. 鄭州: 河南教育出版社, 1993. 1418~1419.
18 吳敬. 九章算法比類大全[M]//中國科學(xué)技術(shù)典籍通匯·數(shù)學(xué)卷. 第2分冊. 鄭州: 河南教育出版社, 1993. 36.
19 李迪, 王榮彬. 明代算書《一鴻算法》研究[J]. 自然科學(xué)史研究, 1993, 12(2): 112~119.
20 郭世榮. 算法統(tǒng)宗導(dǎo)讀[M]. 武漢: 湖北教育出版社, 2000. 238.
21 吉田光由. 塵劫記[M]//日本科學(xué)技術(shù)古典籍資料·數(shù)學(xué)篇(13)//近世歷史資料集成. 第Ⅶ期. 第10卷. 東京: 科學(xué)書院, 2016. 112~116.
22 王文素. 算學(xué)寶鑒[M]//中國科學(xué)技術(shù)典籍通匯·數(shù)學(xué)卷. 第2分冊. 鄭州: 河南教育出版社, 1993. 557.
23 唐順之. 武編[M]//中國兵書集成. 第13~14冊. 北京: 解放軍出版社;遼沈書社, 1989. 20~21.
24 黃仁宇. 唐順之[C]//富路特, 房兆楹. 明代名人傳.5. 北京: 北京時代華文書局, 2015. 1715~1720.
25 楊滌非, 鄒大海. 中國古代軍事中的計和算: 以開方術(shù)在布營中的運(yùn)用為例[J]. 廣西民族大學(xué)學(xué)報(自然科學(xué)版), 2014, 20(2): 15~20.
26 朱載堉. 算學(xué)新說[M]//中國科學(xué)技術(shù)典籍通匯·物理卷. 第2分冊. 鄭州: 河南教育出版社, 1995. 434.
27 朱載堉. 嘉量算經(jīng)[M]//叢書集成三編. 第29冊. 臺北: 新文豐出版公司, 1997. 241.
28 李天綱. 朱載堉集4[M]. 上海: 上海交通大學(xué)出版社, 2013. 3326.
29 李培業(yè). 中國珠算簡史[M]. 北京: 中國財政經(jīng)濟(jì)出版社, 2007. 91.
30 戴念祖. 朱載堉著作及貢獻(xiàn)綜述[C]// 李天綱. 朱載堉集1. 上海: 上海交通大學(xué)出版社, 2013. 1~40.