史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
Karatsuba算法需要3次單個位數之間的相乘以及幾次加法和減法:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
Karatsuba算法需要3次單個位數之間的相乘以及幾次加法和減法:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
Karatsuba算法需要3次單個位數之間的相乘以及幾次加法和減法:
其實,Karatsuba 的算法的主要想法是分治算法,雖看起來複雜,但在大數相乘時,它的優勢就體現出來了,可節省個位數之間相乘的次數上:
當乘數的位數很多時,可以重複進行 Karatsuba過程,將大數的乘數拆分成更小的部分,並以一種新穎的方式重新組合這些部分,這種方式可以用少量的加法和減法來代替大量的乘法。
簡單來說,所進行的拆分的次數越多,相比傳統算法,你就節省了越多次個位數之間的相乘。
例如,計算 2531 乘以1467,傳統的算法需要進行 16 次單個位數之間的相乘:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
Karatsuba算法需要3次單個位數之間的相乘以及幾次加法和減法:
其實,Karatsuba 的算法的主要想法是分治算法,雖看起來複雜,但在大數相乘時,它的優勢就體現出來了,可節省個位數之間相乘的次數上:
當乘數的位數很多時,可以重複進行 Karatsuba過程,將大數的乘數拆分成更小的部分,並以一種新穎的方式重新組合這些部分,這種方式可以用少量的加法和減法來代替大量的乘法。
簡單來說,所進行的拆分的次數越多,相比傳統算法,你就節省了越多次個位數之間的相乘。
例如,計算 2531 乘以1467,傳統的算法需要進行 16 次單個位數之間的相乘:
而 Karatsuba算法只需要進行 9 次單個位數之間的相乘:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
Karatsuba算法需要3次單個位數之間的相乘以及幾次加法和減法:
其實,Karatsuba 的算法的主要想法是分治算法,雖看起來複雜,但在大數相乘時,它的優勢就體現出來了,可節省個位數之間相乘的次數上:
當乘數的位數很多時,可以重複進行 Karatsuba過程,將大數的乘數拆分成更小的部分,並以一種新穎的方式重新組合這些部分,這種方式可以用少量的加法和減法來代替大量的乘法。
簡單來說,所進行的拆分的次數越多,相比傳統算法,你就節省了越多次個位數之間的相乘。
例如,計算 2531 乘以1467,傳統的算法需要進行 16 次單個位數之間的相乘:
而 Karatsuba算法只需要進行 9 次單個位數之間的相乘:
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
Karatsuba算法需要3次單個位數之間的相乘以及幾次加法和減法:
其實,Karatsuba 的算法的主要想法是分治算法,雖看起來複雜,但在大數相乘時,它的優勢就體現出來了,可節省個位數之間相乘的次數上:
當乘數的位數很多時,可以重複進行 Karatsuba過程,將大數的乘數拆分成更小的部分,並以一種新穎的方式重新組合這些部分,這種方式可以用少量的加法和減法來代替大量的乘法。
簡單來說,所進行的拆分的次數越多,相比傳統算法,你就節省了越多次個位數之間的相乘。
例如,計算 2531 乘以1467,傳統的算法需要進行 16 次單個位數之間的相乘:
而 Karatsuba算法只需要進行 9 次單個位數之間的相乘:
由此可見,使用Karatsuba 算法,這一運算僅需2n次加減法,而傳統的算法需要n²次。
到了1971年,德國數學家Schonhage和Strassen提出Schönhage-Strassen算法,運行時複雜度為:n×logn×log(logn),對於兩個10億位數的數字,比Karatsuba的方法要節省大約165萬億步。
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
Karatsuba算法需要3次單個位數之間的相乘以及幾次加法和減法:
其實,Karatsuba 的算法的主要想法是分治算法,雖看起來複雜,但在大數相乘時,它的優勢就體現出來了,可節省個位數之間相乘的次數上:
當乘數的位數很多時,可以重複進行 Karatsuba過程,將大數的乘數拆分成更小的部分,並以一種新穎的方式重新組合這些部分,這種方式可以用少量的加法和減法來代替大量的乘法。
簡單來說,所進行的拆分的次數越多,相比傳統算法,你就節省了越多次個位數之間的相乘。
例如,計算 2531 乘以1467,傳統的算法需要進行 16 次單個位數之間的相乘:
而 Karatsuba算法只需要進行 9 次單個位數之間的相乘:
由此可見,使用Karatsuba 算法,這一運算僅需2n次加減法,而傳統的算法需要n²次。
到了1971年,德國數學家Schonhage和Strassen提出Schönhage-Strassen算法,運行時複雜度為:n×logn×log(logn),對於兩個10億位數的數字,比Karatsuba的方法要節省大約165萬億步。
這兩位德國數學家還提出了一種來自信號處理領域的技術,稱為快速傅里葉變換。自那以後,該技術一直是所有快速乘法算法的基礎;此外,還推測應該有一種比他們發現的算法更快的算法——一種複雜度為n×logn的算法(這種算法可能是最快的)。
不過,至那以後,計算機大數乘法算法的發展陷入了僵局,再也沒有進展。
直到2007年,賓夕法尼亞州立大學數學家Martin Fürer提出逼近n×logn的Fürer算法,打破沒有進展的僵局,過去十年乘法算法不斷改善,無限接近n×logn。
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
Karatsuba算法需要3次單個位數之間的相乘以及幾次加法和減法:
其實,Karatsuba 的算法的主要想法是分治算法,雖看起來複雜,但在大數相乘時,它的優勢就體現出來了,可節省個位數之間相乘的次數上:
當乘數的位數很多時,可以重複進行 Karatsuba過程,將大數的乘數拆分成更小的部分,並以一種新穎的方式重新組合這些部分,這種方式可以用少量的加法和減法來代替大量的乘法。
簡單來說,所進行的拆分的次數越多,相比傳統算法,你就節省了越多次個位數之間的相乘。
例如,計算 2531 乘以1467,傳統的算法需要進行 16 次單個位數之間的相乘:
而 Karatsuba算法只需要進行 9 次單個位數之間的相乘:
由此可見,使用Karatsuba 算法,這一運算僅需2n次加減法,而傳統的算法需要n²次。
到了1971年,德國數學家Schonhage和Strassen提出Schönhage-Strassen算法,運行時複雜度為:n×logn×log(logn),對於兩個10億位數的數字,比Karatsuba的方法要節省大約165萬億步。
這兩位德國數學家還提出了一種來自信號處理領域的技術,稱為快速傅里葉變換。自那以後,該技術一直是所有快速乘法算法的基礎;此外,還推測應該有一種比他們發現的算法更快的算法——一種複雜度為n×logn的算法(這種算法可能是最快的)。
不過,至那以後,計算機大數乘法算法的發展陷入了僵局,再也沒有進展。
直到2007年,賓夕法尼亞州立大學數學家Martin Fürer提出逼近n×logn的Fürer算法,打破沒有進展的僵局,過去十年乘法算法不斷改善,無限接近n×logn。
可喜可賀的是,今年3月份澳大利亞的兩位年輕數學家David Harvey 和Joris van der Hoeven提出新的算法——通過使用多次傅里葉變化,用大量加法和減法代替乘法,證實乘法可以在n×logn步內完成!
這或許是最快的算法,但有點遺憾的是還沒能證明這是最快的算法。
史上最快
超大數乘法算法
今天,8歲表妹放學回家,垂頭喪氣的,一臉不開心。
超模君:“小屁孩,你怎麼回事呀?”
表妹:“今天數學課,老師問19乘以17等於多少,印度小朋友一下子就站起來回答了,為什麼他這麼厲害,他們不是沒有99乘法口訣表嗎?”
超模君:“畢竟人家用的是19*19乘法口訣。”
表妹一臉懵:“還有這玩意兒?”
花式乘法算法
確實是有這玩意兒,天生愛“開掛”的印度民族在乘法口訣表上又“開掛”了——“19*19乘法口訣表”瞭解一下:
這什麼概念?就像表妹在課堂上被“吊打”一樣,你問他們18*16等於多少,他們不用思考,秒回“288”,而咱要稍微心算一下才能得到答案。
這是可以理解的,畢竟我們用的是九九乘法口訣表,18*16已經超過了我們口算的範圍,而像這些超過個位數的乘法,我們通常要用豎式乘算法計算:
在此插句話:特別感謝市二小學三年級的李老師,是你的顏值,讓我深深記住了豎式乘法!
其實印度不止乘法口訣跟我們不一樣,他們超過19*19的數乘,使用的乘法算法也不一樣,印度的哥們怎麼進行計算呢?
據說是這樣的:
他們把這種算法稱為格子乘法,感覺還不錯哈,不過可能有點費草稿紙。
說到這,不得不提一下在英格蘭、威爾士還有美國部分地區常見的網格/盒子乘法了。
網格乘法:
除此之外,還有畫線數點乘法:
算這麼小的數就這麼費草稿紙了,那他們解個數學題不得待在紙廠裡?
那倒不用,畢竟可以使用計算機運算嘛。
那麼問題又來了,當涉及成萬上億的計算、計算圓周率或者尋找最大質數的時候,用現有的乘法算法邏輯,即使是超級計算機也頂不住呀。
比如,要將兩個 10 億位數的數字相乘,採用豎式乘法算法,需要進行十億的平方次個位數的相乘,這個運算需要現代計算機花費大約 30 年的時間。
歷史的車輪滾滾向前,關於乘法算法的研究,數學家們從來沒有停止過。
顛覆傳統,算法升級
現如今,關於算術運算的研究歷史如今都記錄在了《古今數學思想》,其中不得不提的是20世紀最偉大的數學家之一的安德雷·柯爾莫哥洛夫,他對算術運算做了很深的研究。
1960年,柯爾莫哥洛夫召開算術發展研討會,他表示:沒有一種方法可以以少於 n 的平方次個位數之間的相乘來完成兩個n位數之間的相乘。
現場數學家幾乎都認同了柯爾莫哥洛夫的觀點,一致認為:沒有比傳統的豎式乘法更好的乘法算法了。
但話音剛落,23歲的俄羅斯數學家Anatoly Karatsuba公然表示反對,現場一片譁然。
他駁了大數學家的面子後,很多數學家都認為這小子口出狂言,是個瘋子。
但讓人意外的是:僅僅過了一週,他就找到了比豎式乘法更快的算法——知名的Karatsuba算法。
舉個例子,計算25乘以63, 傳統的算法需要4次單個位數之間的相乘以及幾次加法:
Karatsuba算法需要3次單個位數之間的相乘以及幾次加法和減法:
其實,Karatsuba 的算法的主要想法是分治算法,雖看起來複雜,但在大數相乘時,它的優勢就體現出來了,可節省個位數之間相乘的次數上:
當乘數的位數很多時,可以重複進行 Karatsuba過程,將大數的乘數拆分成更小的部分,並以一種新穎的方式重新組合這些部分,這種方式可以用少量的加法和減法來代替大量的乘法。
簡單來說,所進行的拆分的次數越多,相比傳統算法,你就節省了越多次個位數之間的相乘。
例如,計算 2531 乘以1467,傳統的算法需要進行 16 次單個位數之間的相乘:
而 Karatsuba算法只需要進行 9 次單個位數之間的相乘:
由此可見,使用Karatsuba 算法,這一運算僅需2n次加減法,而傳統的算法需要n²次。
到了1971年,德國數學家Schonhage和Strassen提出Schönhage-Strassen算法,運行時複雜度為:n×logn×log(logn),對於兩個10億位數的數字,比Karatsuba的方法要節省大約165萬億步。
這兩位德國數學家還提出了一種來自信號處理領域的技術,稱為快速傅里葉變換。自那以後,該技術一直是所有快速乘法算法的基礎;此外,還推測應該有一種比他們發現的算法更快的算法——一種複雜度為n×logn的算法(這種算法可能是最快的)。
不過,至那以後,計算機大數乘法算法的發展陷入了僵局,再也沒有進展。
直到2007年,賓夕法尼亞州立大學數學家Martin Fürer提出逼近n×logn的Fürer算法,打破沒有進展的僵局,過去十年乘法算法不斷改善,無限接近n×logn。
可喜可賀的是,今年3月份澳大利亞的兩位年輕數學家David Harvey 和Joris van der Hoeven提出新的算法——通過使用多次傅里葉變化,用大量加法和減法代替乘法,證實乘法可以在n×logn步內完成!
這或許是最快的算法,但有點遺憾的是還沒能證明這是最快的算法。
看到他們的髮際線,超模君就知道大數乘法算法還有很長的路要走!