2024-12-09|閱讀時間 ‧ 約 0 分鐘

俄式乘法:關於「拆分計算」、「尋找規律」與「二進制」思路

〈俄式乘法:關於「拆分計算」、「尋找規律」與「二進制」思路〉2023-12-09


  加減乘除是我們在小學義務教育中就學過的內容。即便是自認數學不好的人,也很難被「請將以下兩個數字相乘」的問題輕易難倒。當然,不小心算錯的情況總是有的,但幾乎已經不太有人會算不出來。但我們是如何算出來的呢?


  通常的做法似乎是:將每一位數分別相乘,然後把這些相乘的結果按照其位數關係相加。如果是兩三位數還可能心算,但當數字更大一點時,通常需要在紙張上列出直式乘法,才能比較不錯亂地計算出來(先假定你沒帶手機,也沒有其他有計算機功能的東西在身上。或者,你就在國小數學考試的現場,所以,別作弊喔!)。但進一步去問,在我們如此熟悉地在過程裡運用個位數乘法之前,我們是怎麼學會的呢?


  一種思路是透過圖像畫與應用化,讓我們能夠盡可能地去「理解」乘法並對個位數乘法的過程與結果產生印象。譬如我們可以畫三個籃子,每個籃子裡有三顆雞蛋,以此去認識"3x3=9"。另一種更典型與傳統的做法就是背「九九乘法表」--總之事情就是這樣,先背起來,考試會考。但無論是哪種方法,在數字一到五的時候都相對簡單,六七八開始就會比較困難。


  但到了九的時候,又變簡單了,因為九就是十減一。所以,3x9就是30-3、4x9就是40-4,同時我們也能清楚看見結果的規律,兩個位數加起來是九,然後一個比一個大。去思考這件事,利用這個「小聰明」是重要且有益的。因為這其實給了我們兩種在數學上好用的能力:「拆分計算」與「尋找規律」。而這可以讓我們更進一步地去思考乘法、思考計算、乃至於對數學在文明中的作用有整體性的進一步認識。



  據傳,在俄羅斯的鄉村中,沒有上過學的農夫們一直運用著一種有別於我們一般乘法的乘法計算方式。在這種被稱為俄式乘法(甚至俄國農夫乘法)的計算方式中,計算者不需要被過九九乘法,他需要的就只有「加倍」、「減半」與「全部加起來」。


  這個計算方式可以分為以下幾個步驟:首先,把要相乘的兩個正整數放在第一列的左右兩邊。第二步:將左邊的數減半向下取整、右邊的數加倍寫在第二列;第三步:重複上一步,直到左邊的數變成一。第四步,將所有左邊是偶數的數字忽略不計,將右邊剩下的數字全部相加,和數就是答案。舉例,「計算29x12」:


29 | 12

14 | 24 (左邊是偶數,忽略不計)

7  | 48

3  | 96

1  | 192


29x12 = 12+48+96+192 = 348


  從已經學會「標準乘法」的我們的角度看來,這也許很神奇,但似乎只是讓事情變得更麻煩。但從沒有機會受到現代數學教育的人來說,能夠只用「加倍」、「減半」與「全部加起來」這樣素樸的數學概念就將兩個「很多」乘在一起,對古代俄羅斯農村生活而言,已經非常堪用且方便了。但另一方面,這種算法以及其背後的思路,在今日,仍有著相當大的作用。它能讓我們更有效率地完成一些,計算量大到人類難以想像的計算。



  事實上,這種算法其實沒有那麼難理解,其中的素樸想法便是:「把東西每兩個算作一堆,多出來的先放旁邊。」重複到最後,我們會得到一個「好大一堆」,以及好幾個放到一邊的,把它們通通加起來就是答案。這之中一個最普遍的邏輯跟我們在計算「乘以五」的時候會「先除以二再乘以十」、計算「乘以九」的時候會「乘以十再減乘以一」的道理有相似之處,我們都是去把它分拆乘對我們而言更好計算的部分,再把它組和在一起。


  但同時,它還包含了另一個邏輯,也就是二進制的思路。以前面的例子來說,29寫成二進制是"11101"。相應地,在俄式乘法中,第二列會是沒有餘數(也就意味著,這一階段的「小堆」被完整地分到了下一階段的「大堆」)的、要在最後被忽略不計的偶數。而其他幾列,被標誌出"1",也就是有餘數的、需要在最後被加在一起的奇數。



  如果是熟悉程序的人一定能馬上聯想到,那個在俄式乘法裡要被計算與不要被計算的分別,其實也就是"True"和"False"。俄式乘法的思路,在那些大到超越人類計算尺度的計算--譬如說高次方數的運算、或者費波那契數列的計算--,都能夠透過這種「二進制化並拆分」的方式,更有效率地被計算出來。


  譬如說,當我們需要計算一個數字的n次方時,我們並不是只能暴力地將這個數字乘以自己n次,而是可以把n改寫為2的正整數次方之和(如果是奇數則再加一),來更有效率地作計算。


  其中的邏輯是:譬如說,一個數的4次方是它的平方再平方,我們只需要計算兩次;一個數的16次方就是平方、平方再平方,只要計算三次;21次方則是前兩者的相加再加一,也就是,只要計算2+3+1次,遠遠小於21次。對於愈大的數,其中的差距將會愈加顯著。



  對於人類而言,計算一些越來越大的數的平方還是很不方便,不見得總是能更省時獲省力,但對計算機而言,那些對我們來說「有夠大」的數的計算,其實跟個位數、十位數的計算沒有差多少。


  去降低需要計算的次數,可以讓計算的「時間複雜度」大幅降低,大幅減少時間,也相應地,大幅減少了這些天文數字計算時,計算機運算時消耗的電量與整體社會資源。除了在一些精密科學上有很大的利用價值外,也能在加密與解密技術中有所應用。


  同時,這種「多次的」與「可模式化的動作」,很大程度也就是我們當下認為AI能夠比傳統機械更加有能力做到的事情。也就是說,這一邏輯的理解,很有可能有助於我們在未來更快地銜接AI的思維。


  甚至,就如同萊布尼茲在《易經》中驚奇地遭遇到古代關於二進制的思考,或許某種意義來說,資訊時代與AI時代,反而有機會將我們從蒸氣時代以來的偏移,帶回到那--如果完整的差分機被成功打造,我們能少走一點彎路就抵達的--原先的、與地球更加協調的文明軌道。




延伸閱讀:

〈「6÷2(1+2)=?」:一則簡單的四則運算為什麼在十多年內病毒傳播?〉

〈不只關於答案,關於理解並回應問題〉

〈班門弄斧:班佛定律與世界中的數〉

〈獲得搞笑諾貝爾獎的「同側偏差」實驗:硬幣投擲從來就不是「完全公正」〉

〈機率思維中的張力:三門問題與「運氣守恆的直覺」〉

〈Mr. Anderson〉



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.