筆者在前面各章介紹了珠算的加、減、乘、除四則運算技巧。「乘方」和「開方」是繼四則運算之後常要用到的算術運算,由於「乘方」等於「自乘」運算,只要懂得珠算乘法,便必能用算盤進行「乘方」。「開方」的情況又如何呢?我們能否用算盤進行「開方」?在本章和以下兩章,筆者將介紹珠算開方方法,這種方法的實質就是在算盤上實現某種傳統的筆算開方方法(註1)。在本章,我們從最簡單的開方運算-「開平方」說起。
以下首先介紹傳統的筆算開平方方法,這種方法跟用筆算進行多位被除數除法有很多相似之處。簡言之,這種除法的原理是先從被除數中抽取開首若干個數字出來,使原來的多位被除數除法變成較少位被除數除法。這個除法包含「估商」和「減積」這兩個過程:「估商」過程的目的是估計商數的某個位;「減積」過程的目的則是評估上述估值是否正確,我們要確保被除數(或其餘下部分)減去所估商數與除數的乘積後所得餘數滿足以下兩個條件:(1)該餘數不得小於0 (以保證估值不會過大);(2)該餘數必須小於除數(以保證估值不會過小)。完成上述過程後,我們便從原來被除數的餘下位數中再抽取若干個數字出來,加在剛才所得的餘數後面,繼續進行除法。
類似地,用筆算進行多位數開平方的原理也是先從被開方數中抽取開首若干個數字出來,把原來的多位數開平方變成較少位數開平方。具體做法是將被開方數的整數部分從個位起向左每兩位分為一組,並且從小數點起向右每兩位分為一組(必要時須補零)。為甚麼要每兩位分為一組?這是因為√1 = 1,√100 = 10,√10000 = 100...,即被開方數的整數部分若有2n或2n − 1個位,其平方根的整數部分便有n個位。進行上述分組可以幫助我們為被開方數的位數與平方根的位數建立對應關係,方便接下來的運算。完成上述分組後,我們便從左到右把這些組別分別記作x1、x2、x3...,並且首先根據x1估計平方根的首位數字(以下記作a1),這等於把原來的多位數開平方變成對x1進行開平方運算。由於x1只包含一至兩位數字,這部分運算很簡單,只需運用乘法表便可。舉例說,假設我們要求√4523.8,首先把這個被開方數分組,得到x1 = 45,x2 = 23,x3 = 80,並且根據45估計√4523.8的首位數字。由於62 < 45 < 72,可知這個數字是6。
估定平方根的首位數字a1後,我們便把x2帶進來以估計平方根的第二位數字(以下記作a2),這等於對100x1 + x2進行開平方運算。這項運算包含「估根」和「減冪」這兩個過程,在「估根」過程中,已知100x1 + x2的平方根具有10a1 + a2的形式,其中a1已在上一步求得,我們要估計的是a2。為估計這個數值,我們進行以下解方程過程:
(10a1 + a2)2 | = 100x1 + x2 |
100a12 + 20a1a2 + a22 | = 100x1 + x2 |
a2(20a1 + a2) | = 100x1 + x2 − 100a12 |
因此可以把a2估計為(100x1 + x2 − 100a12) / 20a1的整數部分(註2),但這個估值可能會把a2高估了。此外,有時我們可能會憑直覺估計a2,這樣亦可能把a2估錯了,所以接下來要進行「減冪」,即計算以下差值以評估上述估值是否正確:
100x1 + x2 − (10a1 + a2)2 | |
= | 100x1 + x2 − 100a12 − 20a1a2 − a22 (1) |
以下把(1)稱為「餘數」。類似於除法,我們也要確保這個餘數滿足兩個條件。為保證a2的估值不會過大,第一個條件顯然就是
即餘數不得小於0。如何保證a2的估值不會過小?我們可以這樣考慮,如果把某個估值k + 1代入(2)中的a2後該不等式成立,那麼k肯定是過小的估值,因為有一個比它大的估值k + 1滿足(2)。因此為保證a2的估值不會過小,第二個條件是
100x1 + x2 − 100a12 − 20a1(a2 + 1) − (a2 + 1)2 | < 0 |
100x1 + x2 − 100a12 − 20a1a2 − 20a1 − a22 − 2a2 − 1 | < 0 |
100x1 + x2 − 100a12 − 20a1a2 − a22 | < 2(10a1 + a2) + 1 (3) |
即餘數必須小於2(10a1 + a2) + 1。如果餘數不滿足(2)或(3),我們便要把估值調低或調高,直至這兩個條件皆得到滿足為止。下圖顯示用直式計算√4523.8首兩個位的過程:
在上圖中,923相當於100x1 + x2 − 100a12,直式左側上方的120相當於20a1 。在「估根」過程中,由於923 / 120的整數部分是7,所以我們估計a2 = 7,並把這個7寫在120的下面。在「減冪」過程中,我們從923減去889,得到餘數34。這個889等於7 × (120 + 7),相當於a2(20a1 + a2),亦即20a1a2 + a22,34則相當於用(1)求得的餘數。直式左側下方的134相當於2(10a1 + a2),是用來判斷餘數是否滿足(3)。由於餘數34不小於0而且小於134 + 1 = 135,所以滿足(2)和(3),由此可知上述直式的計算結果正確。
估定平方根的首兩位數字後,我們便把x3帶進來以估計平方根的第三位數字(以下記作a3)。現在如果把100x1 + x2記作X1,x3記作X2,10a1 + a2記作A1,a3記作A2,那麼接下來的運算方法便跟前面介紹的完全一樣(只需把前面的x和a改為X和A即可)。下圖顯示用直式計算√4523.8至第三位的過程(其中X1 = 4523,X2 = 80,A1 = 67):
在上圖中,3480相當於100X1 + X2 − 100A12,直式左側中間的1340相當於20A1 (註3) 。在「估根」過程中,由於3480 / 1340的整數部分是2,所以我們估計A2 = 2,並把這個2寫在1340的下面。在「減冪」過程中,我們從3480減去2684,得到餘數796。這個2684等於2 × (1340 + 2),相當於20A1A2 + A22。直式左側下方的1344相當於2(10A1 + A2),由於餘數796不小於0而且小於1344 + 1 = 1345,所以滿足(2)和(3),由此可知上述直式的計算結果正確。
上圖顯示√4523.8 = 67.2..7.96,這裡√x = y..z的意思是x = y2 + z。理論上我們可以不斷重覆上述過程以求得平方根的更多位數,但上圖顯示在這種筆算方法下,每一次進行「估根」和「減冪」後的餘數會變得愈來愈大(上圖中的第一個餘數是34,第二個餘數則是796),令接下來的運算越來越難進行,所以上述這種筆算開平方方法實際上只能算出平方根的首幾個位。
接下來介紹中國古代一種「增乘開平方」珠算,這種方法實際上就是在算盤上實現上述筆算開平方方法,以下仍以√4523.8為例以作說明。在進行「增乘開平方」時,我們要在算盤上預留三個區域分別用來放置不同的數:算盤的右端用來放置被開方數,左端用來放置平方根,中間則用來放置上述直式中左端的數。開始時首先把被開方數4523.8佈於算盤右端,如下圖所示(下圖還標出「定位點」和被開方數的小數點,分別作為平方根和餘數的小數點位置,請注意平方根的小數點位置是根據被開方數有4個整數位故其平方根應有2個整數位而定出的):
根據h、i檔上的45,可知平方根的首位是6,所以在a檔上加6,在e檔上也加6,並同時從h、i檔減去平方根首位6的平方(即36),然後在e檔上再加上平方根首位6 (這樣做的目的是使d至e檔上的數字等於2a1)(註4),如下圖所示:
接著用d至f檔上的120 (以心算)除右端的923,由於所得商的整數是7,估計平方根的第二位是7,所以在b檔上加7,在f檔上也加7,並同時從i至k檔減去平方根第二位7與中間位置上127的乘積(即889),然後在f檔上再加上平方根第二位7 (這樣做的目的是使d至f檔上的數字等於2A1),如下圖所示:
由於j至k檔上的數字34小於d至f檔上的數字134 + 1,可知以上估得的平方根第二位7是正確的。接下來繼續估計平方根的第三位。用d至g檔上的1340 (以心算)除右端的3480,由於所得商的整數是2,估計平方根的第三位是2,所以在c檔上加2,在g檔上也加2,並同時從j至m檔減去平方根第三位2與中間位置上1342的乘積(即2684),然後在g檔上再加上平方根第三位2 (這樣做的目的是使d至g檔上的數字等於2(10A1 + A2)),如下圖所示:
由於k至m檔上的數字796小於d至g檔上的數字1344 + 1,可知以上估得的平方根第三位2是正確的。至此求得√4523.8 = 67.2..7.96,理論上我們可以求這個平方根的更多位數,但須在算盤上的左端、中間和右端預留更多空檔,而且計算會越來越繁複。
從以上介紹可見,類似於「商除法」,除了乘法口訣(即「九因歌」)外,「增乘開平方」方法沒有特定的口訣,且須使用一定心算以進行「估根」過程。此外,如果「估根」過程出錯,「增乘開平方」並沒有像「商除法」的「進商法」和「中途退商法」那樣的簡單方法調整錯估了的平方根。在這種情況下,我們只能把算盤還原至「減冪」過程前的狀態,把平方根的某個位調高或調低,然後重新進行「減冪」過程。