微博上外國人算乘法用的方法是什麼原理?

交叉數交叉點竟然能得到結果Σ( ?□?)?

這是什麼原理啊?

視頻鏈接:

http://m.weibo.cn/2141823055/3998696033720802?uicode=10000002featurecode=10000001mid=3998696582199043luicode=10000001_status_id=3998696033720802rid=9_0_8_2815982603415261250fromlog=100015356103423_forcelfid=100015356103423


驚呆,他們居然用卷積算乘法

中國或成最大輸家233

把多位數overline{a_na_{n-1}...a_0}寫成多項式f(x) = sum_ka_k x^k在x = 10時候的值,同樣另一個乘數可以寫成g(x)在x = 10時的值,則f和g是對應序列的z變換,z變換的乘積的反變換是原序列的卷積

而這個方法就是用卷積定義來計算卷積:

(a ast b)_m = sum_ka_kb_{m-k}

計算完之後代回多項式中然後處理一下進位就可以算出乘法的結果了。

別看跟中國傳統的豎式比起來蠻蠢的,但是用卷積計算多位數乘法可以使用FFT優化卷積,將效率提升到O(nlogn),所以如果你可以手算FFT的話你就可以快速算出兩個多位數的乘法(大霧)

=============================================================

這怎麼還火了……補充一點註解,如果不了解z變換之類的概念也不要緊,考慮f(x)和g(x)的多項式乘法就可以了,a_k b_{m-k}的這一項對應的是a_k x^k cdot b_{m-k} x^{m-k},後面對應的x的係數剛好是m,所以把所有這樣的項加起來就是x^m前面的係數,這就是乘法與卷積相互轉換的原理。在乘得的多項式里代入x=10,就可以得到乘法的結果。雖然手算FFT是個笑話,不過計算機的確可以通過FFT來快速得到兩個高精度數(比如幾百萬位乘以幾百萬位)的乘積,原理就是上面這樣。


原理跟我們列豎式難道不是一樣的嗎!

區別就在於我們中國學生背了99乘法表 所以能夠省略掉個位數相乘的步驟!


既然大家都說豎式了,我來直接說明一下

left(sum_{i=0}^n10^ia_i
ight)left(sum_{i=0}^m10^ib_i
ight)=sum_{i=0}^{n+m}left(10^isum_{j=0}^ia_jb_{i-j}
ight)

所以我們要把每個 a_ib_j 相乘加在第 i+j 位上

然後恰好這些斜線上的數都是 i+j 相等的啦


就是一個複雜而又沒有效率的列豎式


幾根斜線的交叉以後產生的點的個數不就是乘法嗎?

把那些點個數加起來不就是豎式中間部分的相加嗎?

總之,這就是把豎式用原始的方式展示一下,沒有什麼進步意義。


紅筆部分不就是他用弧線劃分出的5個區上面的點?

其實就像上面有的答案說的,老外沒背99乘法表,只能劃線數點而已。


我來扯一個

這個跟圍繞里分級次的思路差不多,同級併到一起唄。

不過學過微擾的,也都看懂這個圖了吧...


呵呵讓他們用這個方法算個879乘698試試


你們手算乘法怎麼還是用豎式的。。我都用的是karatsuba(逃)


看到大家各種高端的回答我也是醉了,其實不就是和我們小學的豎式乘法一樣的么,只不過他們不會背口訣,就只能數點了。。。。我再一次被知乎的高大上深深折服。。


我正在趕作業。寫的匆忙,回家整理一下。一般兩位數相乘用這個辦法都可以口算出來,三位數相乘不是很複雜都可以口算,三位數兩位數相乘等同於於三位數兩位數相乘,百位0


突然在想,在國外的知乎(quora)上會不會有外國人問:中國人算乘法用的那種豎式方法是什麼原理?


我也曾因這種演算法驚嘆不已

直到我用來計算諸如999*999這樣的算式的時候我才發現

這種計算方式並沒有什麼卵用

原理和豎式一樣,不過是用畫圖顯得比較簡單而已


你們城裡人太容易高潮了!!

這視頻幾年前看過,原理很簡單吧……

前幾天還給學生講過這個遊戲,孩子們覺得好神奇。

後來給他們講了原理,他們一臉「老師你耍我」的表情。


這個案例告訴我們背好九九乘法表是多麼的有必要。


來來來,算個789.6x45.3,看看怎麼進位


推薦閱讀:

希望在幾何領域深入學習,各位有什麼書籍推薦?
到達什麼水平才能算是學會了數學?
關於物理系和經濟金融類對數學的要求誰高?
共形場論中徑向量子化(radial quantization)的問題?
是否存在一不等於0的完全平方數,使得它成為連續質數個整數之積?

TAG:微博 | 計算 | 數學 |