珠算解難:商除法


筆者在前面幾章介紹了一套包含「歸除法」、「退商法」和「撞歸法」的傳統珠算除法(以下統稱為「歸除法」),這套除法的優點是使用「機械化」的方法(即既定的口訣和算法程序)進行「估商」和「減積」程序,免除一般筆算除法須使用心算在「估商」後試行「減積」以看看所估的商數是否適中的麻煩。「歸除法」的缺點就是要背誦口訣,雖說「無除起一下還n」和「見n無除撞九n」這18句口訣非常有規律,無須背誦,但「九歸歌」卻不太好記。此外,與筆算除法相比,「歸除法」有時需用上較多口訣才能得到正確的商數,不及筆算除法那樣直截了當。以計算63 / 7為例,在筆算除法下,只需運用「九因歌」口訣「七九六十三」便能直接求得商數為9;但在「歸除法」下,卻要前後運用兩句「九歸歌」口訣「七六八十四」和「逢七進一」才能得到正確的商數。

鑑於「歸除法」有以上的缺點,筆者在本章介紹另一種珠算除法-「商除法」,這種除法跟一般的筆算除法非常相似,只需使用「九因歌」,無需使用「九歸歌」。在介紹「商除法」之前,首先回顧筆算除法與「歸除法」的差異。下圖顯示用直式筆算計算12052 / 24的過程:

從上圖可見,用直式筆算求商數的每一個位都包含「估商」和「減積」過程。例如在求12052 / 24商數的首位時,我們首先估得商數的首位為5,接下來的步驟實際等於計算12052 − 500 × 24 = 52。

「歸除法」也包含「估商」和「減積」的過程,分別使用「九歸歌」(或「撞歸法」口訣)和「九因歌」。但由於「九歸歌」(或「撞歸法」口訣)包含著有關商數和餘數的信息(註1),用「九歸歌」(或「撞歸法」口訣)「估商」的過程其實包含著「減積」的前期操作,從而可能出現商數的位置與被除數(或其餘下部分)的位置重疊的情況。以12052 / 24為例,在「歸除法」下,我們首先運用口訣「二一添作五」,其結果如下圖所示:

請注意運用上述口訣的結果是,我們估得商數的首位為5 (此即「估商」的結果),並同時進行了12052 − 500 × 20 = 2052 (此即「減積」的前期操作)。另請注意上述商數與原來被除數的首位同在b檔,但這不會造成沖突,因為口訣「二一添作五」的作用就是把b檔從原來記錄被除數的首位數字1,改為記錄商數5。

「商除法」實質上是用算盤代紙筆進行直式筆算,因此具有直式筆算的特點,即用心算而非「九歸歌」口訣估商,「估商」過程不包含「減積」的前期操作。由於「減積」與「估商」這兩個過程截然分開,在進行「減積」時,商數的位置不可與被除數(或其餘下部分)的位置重疊,所以「商除法」下商數的位置會較「歸除法」下商數的位置左移一檔距離,因此商數小數點的確定方法也要作相應調整(而餘數小數點的位置則維持不變,在代表被除數個位那一檔的右側),具體方法如下:先把除數和被除數佈於算盤上,並把「定位點」撥至代表被除數個位那一檔的左側(而非右側)。若除數大於1且在小數點前有n位數字(n ≥ 1),便把「定位點」向左移n檔的距離;若除數小於1且緊隨小數點後為非零數字,則無須移動「定位點」;若除數小於1且緊隨小數點後有n個(n ≥ 1)連續的0,則把「定位點」向右移n檔的距離。經移動後的「定位點」的位置就是商數的小數點位置。

以下仍以12052 / 24為例說明「商除法」的步驟,首先在算盤上佈數,並確定商數小數點和餘數小數點的位置,如下圖所示(試比較下圖與上圖中「定位點」的位置):

接著開始進行「估商」,我們用以下法則確定應把估得的商數記在哪一欄:假設除數共有m位數字,若被除數(或其餘下部分)的首m位數字較除數小,應把商數記在緊挨被除數(或其餘下部分)的首位數字左面的一檔,這種情況稱為「挨檔置商」;若被除數(或其餘下部分)的首m位數字大於或等於除數,則應把商數記在被除數(或其餘下部分)的首位數字左面隔一檔,這種情況稱為「隔檔置商」。以上圖為例,根據被除數首3位數字120與除數24,用心算估得商數為5。由於被除數首2位數字12小於除數24,故應實行「挨檔置商」,把商數5記在b欄,如下圖所示:

接下來進行「減積」,其方法跟「歸除法」下的「減積」過程非常相似。首先計算5 × 2,得10,把這個積從c、d檔減去;然後計算5 × 4,得20,把這個積從d、e檔減去,其結果如下圖所示(請注意以上運算實質上是從被除數減去500 × 24 = 12000):

接著進行第二輪「估商」。根據被除數餘下部分的首2位數字52與除數24,用心算估得商數為2。由於52大於24,故應實行「隔檔置商」,把商數2記在d欄,如下圖所示:

接下來進行「減積」。首先計算2 × 2,得4,把這個積從e、f檔減去;然後計算2 × 4,得8,把這個積從f、g檔減去,其結果如下圖所示(請注意以上運算實質上是從被除數的餘下部分減去2 × 24 = 48):

上圖顯示12052 / 24 = 502..4,與前述直式除法的結果一致。

在某些情況下,尤其是當除數的位數頗多時,心算可能出錯,令估得的商數過低或過高,這時我們有何對策?首先回顧在直式筆算下如何判斷估得的商數是否適中,下圖顯示2050328 / 683479 = 2..683370:

現在看看如果在上述運算中以1或3為商數,將有何結果:



以上兩圖顯示,若估得的商數過低,「減積」後所得餘數將大於或等於除數;若估得的商數過高,「減積」後所得餘數將為負數。只有當「減積」後所得餘數是小於除數的正數時,估得的商數才是正確的。在直式筆算下,若「估商」出錯,我們只能放棄當前所得的計算結果,再算一遍;但在「商除法」下,我們可以模倣「歸除法」中的方法對商數作局部調整。

仍以2050328 / 683479為例,假設我們把商數估為1,在「減積」後將得到以下結果:

在上圖中,減積後的餘數1366849 (記在c至i欄)大於除數683479,這顯示商數1過小。這時我們可以把商數從1調高為2,但把商數調高後,我們必須從被除數的餘下部分減去剛才少減了的683479,其結果如下(比照「歸除法」中的口訣,我們或可把上述操作概括為口訣「逢六八三四七九進一」,這種口訣或可稱為「進商法」口訣)(註2):

經上述調整後,減積後的餘數683370是小於除數的正數,因此2是正確的商數,由此亦求得2050328 / 683479 = 2..683370,與前述直式筆算的結果一致。

現在假設我們在計算2050328 / 683479時把商數估為3。在接下來的「減積」過程中,我們可以順利從c、d檔減去3 × 6 = 18,從d、e檔減去3 × 8 = 24,從e、f檔減去3 × 3 = 9,從f、g檔減去3 × 4 = 12,得到以下中間結果:

如果繼續這個過程,嘗試從g、h檔減去3 × 7 = 21,我們勢必會得到負數,這顯示商數3過大。這時我們可以把商數從3調低為2,但把商數調低後,我們必須把剛才從被除數的餘下部分多減了的683400補回去,即在d檔加6、e檔加8、f檔加3、g檔加4,其結果如下(比照「中途退商法」中的口訣,我們不妨把上述操作概括為口訣「無除起一隔還六八三四」,這種口訣或可稱為「中途隔位退商法」口訣)(註3):

經上述退商後,不要忘記我們還要用新的商數完成剛才未完成的「減積」程序,即從g、h檔減去2 × 7 = 14,從h、i檔減去2 × 9 = 18,最後得到正確的計算結果。

總結以上討論,「商除法」的優點是與筆算除法非常相似,簡單易學,不用背誦口訣。如能結合上面介紹的「進商法」和「中途隔位退商法」,更能克服筆算除法在估商過小或過大時須放棄計算結果、再算一遍的弊端。

註1:例如在口訣「七六八十四」中,「八」是60 / 7的商數,「四」則是60 / 7的餘數。

註2:這裡所稱的「口訣」只是一種比擬,不像「九歸歌」口訣那樣要背誦。下文要介紹的「中途隔位退商法」口訣也是如此。

註3:請注意由於「商除法」下商數的位置較「歸除法」下商數的位置左移一檔距離,所以要隔一位退商,即在d至g檔(而非c至f檔)補回6834,所以口訣中使用「隔」字。另請注意,「商除法」中只會遇到「中途退商」,不會遇到一開始「減積」便要退商的問題,這是因為如果一開始「減積」便發現被除數的餘下部分不夠減,便應即時把估得的商數調低,用新的商數進行「減積」,根本不存在多減了積的情況。



返回數學專題
<script type="text/javascript">(function (d, w) {var x = d.getElementsByTagName('SCRIPT')[0];var f = function () {var s = d.createElement('SCRIPT');s.type = 'text/javascript';s.async = true;s.src = "//np.lexity.com/embed/YW/be0aa169de7f441c6473361be62c9ef6?id=ddad453e7753";x.parentNode.insertBefore(s, x);};w.attachEvent ? w.attachEvent('onload',f) :w.addEventListener('load',f,false);}(document, window));</script>