在各種文明的算術發展過程中,乘法運算的產生是很重要的一步。乙個文明可以比較順利地發展出計數方法和加減法運算,但要想創造一套簡單可行的乘法運算方法卻不那麼容易。我們目前使用的乘法豎式計算看似簡便,實際上這需要我們事先掌握九九乘法口訣表;考慮到這一點,這種豎式計算並不是完美的。我們即將看到,在數學的發展過程中,不同的文明創造出了哪些不同的乘法運算方法,其中有的運演算法甚至可以完全拋棄乘法表。
古巴比倫數學使用60進製,考古發現的一塊古巴比倫泥板證實了這一點。這塊泥板上有乙個正方形,對角線上有四個數字1, 24, 51, 10。最初發現這塊泥板時人們並不知道這是什麼意思,後來某牛人驚訝地發現,如果把這些數字當作60進製的三位小數的話,得到的正好是單位正方形對角線長度的近似值:1 + 24/60 + 51/60^2 + 10/60^3 = 1.41421296296... 這說明古巴比倫已經掌握了勾股定理。60進製的使用為古巴比倫數學的乘法運算發展帶來了很大的障礙,因為如果你要背59-59乘法口訣表的話,至少也得背1000多項,等你把它背完了後我期末**估計都已經全寫完了。另一項考古發現告訴了我們古巴比倫數學的乘法運算如何避免使用乘法表。考古學家們發現一些泥板上刻有60以內的平方表,利用公式ab = [(a+b)^2 - a^2 - b^2]/2 可以迅速查表得到ab的值。另乙個公式則是ab = [(a+b)^2 - (a-b)^2]/4,這說明兩個數相乘只需取它們的和平方與差平方的差,再兩次取半即可。平方數的頻繁使用很可能加速了古巴比倫人發現勾股定理的過程。
古巴比倫數學把除以乙個數看作是乘以它的倒數,利用倒數表可以很方便的實現這種演算法。倒數表開頭的一部分是這個樣子:
2 0; 303 0; 20
4 0; 15
5 0; 12
6 0; 10
8 0; 7, 30
9 0; 6, 40
10 0; 6
12 0; 5
15 0; 4
16 0; 3, 45
18 0; 3, 20
20 0; 3
.... ....
古巴比倫人很早就發現,1/7是乙個無限小數,怎麼除也除不完。古巴比倫的倒數表裡所有的數都是精確的小數,它們(在60進製中)都是有限小數。碰到無限小數時,他們會用取近似值的方法來解決。例如,古巴比倫人會通過1/13 = 1*(1/13) = 7*(1/91) ≈ 7*(1/90) = 7*(40/3600) = (7*40)/3600 來計算1/13的值。那個40就是查倒數表查出來的。
古埃及數學使用了完全不同的乘法運演算法。它們的乘法運算不需要借助任何輔助用表。古埃及人注意到,任何乙個數都可以表示為若干個不同的2的冪的和。因此,你需要做的僅僅是不斷將1和乘數進行翻倍。看看古埃及人如何計算46乘以22:
46 x 22 = 1012
1 22
2 44 44
4 88 + 88
8 176 + 176
16 352
32 704 + 704
-------
1012
上面的演算中,左列是1不斷翻倍的結果,右邊是22不斷翻倍的結果。選出左列的2, 4, 8, 32,它們的和正好就是被乘數46;那麼把右列對應的數加起來就是乘法運算的最終結果。至於如何選出2, 4, 8, 32這四個數,乙個簡單的方法就是,不斷選出左列裡小於被乘數的數中最大的乙個,然後當前被乘數減去它。比如,32是最大的數,用46-32後剩14;8是小於14的最大數,14-8後剩6;然後最大的小於6的數是4,6減去4後剩2,這樣下來2+4+8+32正好就是被乘數46了。這其實就是二進位制的經典應用,2, 4, 8, 32正好與46的二進位制中的數字1一一對應。你可以在這裡看到一些相關的東西。
無獨有偶,據說**農村曾產生過這樣一種乘法算術法:將被乘數逐次減半,同時乘數依次加倍,那麼找出所有左邊的數是奇數的行,其右列的數的和就是答案。例如,下面的例子中,23, 11, 5和1都是奇數,於是右邊對應的44, 88, 176和704的和就是乘法運算的結果。這個做法與古埃及的算術法完全一樣,但看起來似乎更神奇一些。
46 x 22 = 1012
46 22
23 44 44
11 88 + 88
5 176 + 176
2 352
1 704 + 704
-------
1012
做人要厚道
轉貼請註明出處
乘法口訣表
description 還記得以前小學時的九九乘法口訣吧。現在要求你編寫程式列印出乘法口訣。不過現在的乘法口訣表跟以前稍微有點區別,我告訴你乙個數字n 1 n 9 你要給我打出相應的nn乘法口訣表。input 輸入小於10的正整數n output 輸出nxn乘法口訣表。每個乘法口訣表中的除最後乙個乘...
1 9 4 乘法口訣表
問題及 檔名稱 乘法口訣表.cpp 作 者 何小樂 完成日期 2014年 10 月 26 日 版 本 號 v1.0 問題描述 利用迴圈結構輸出乘法口訣表 輸入描述 無輸入 程式輸出 輸出乘法口訣表 include using namespace std int main cout endl retu...
輸出乘法口訣表
解題思路 用巢狀的for迴圈語句實現 這是乙個9 9的乘法口訣表 define crt secure no warnings 1 include includeint main printf n system pause 也可以實現乙個n n的乘法口訣表 define crt secure no w...