大整數乘法

來源:互聯網
上載者:User

標籤:不同   body   問題   ali   order   操作   表示   tab   width   

問題

對於兩個很大的整數相乘,比如,兩個數的位元都是1024, c語言表示不了這麼大的數。不過我們可以使用分治法來求它們的乘積。

解決

不失一般性,兩個數A 和 B都是n位,n是2的冪次。如果不滿足這個條件,可以通過補0操作,使它們滿足。

A: 

a1 a2

 

B:

b1 b2

 

則A*B 可以寫為:

A*B = (a1*10^n/2 + a2) * (b1*10^n/2 + b2)
  = a1*b1*10^n + (a1*b2+a2*b1)*10^n/2 + a2*b2

如果只轉換到這個地步,那這個演算法的時間複雜度還是挺高的

遞推關係式為:T(n) = 4T(n/2) + O(n), 因為分解後,有4個不同的乘法運算

計算後,時間複雜度是 O(n^2)

 

我們還可以繼續最佳化。a1*b1*10^n + (a1*b2+a2*b1)*10^n/2 + a2*b2,這個式子中,a1*b2+a2*b1 可以使用 a1*b1和 a2*b2 來表示。

a1*b2+a2*b1 = (a1-a2)*(b2-b1) + a1*b1 + a2*b2

這樣,A*B 可表示為:

a1*b1*10^n + ((a1-a2)*(b2-b1) + a1*b1 + a2*b2)*10^n/2 + a2*b2

這裡面有3個不同的乘法。加減運算的時間複雜度為 O(n)

遞推關係式為:T(n) = 3T(n/2) + O(n)

時間複雜度為:O(n^log3) = O(n^1.59)

大整數乘法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.