演算法實現(5)大整數乘法

2021-07-03 00:18:07 字數 615 閱讀 9929

通常,在分析演算法的計算複雜性時,都將加法和乘法運算當作基本運算來處理,即將執行一次加法或乘法運算所需的計算時間當作乙個僅取決於計算機硬體處理速度的常數。這個假定僅在參加運算的整數能在計算機硬體對整數的表示範圍內直接處理時才是合理的。然而,在某些情況下,需要處理很大的整數,它無法再計算機硬體能直接表示的整數範圍內進行處理。若用浮點數來表示它,則只能近似的表示它的大小,計算結果中的有效數字也受到限制。若要精確的表示大整數並在計算結果中要求精確的得到所有位數上的數字,就必須用軟體的方法來實現大整數的算術運算。

設x和y都是n位二進位制整數,現在要計算它們的乘積xy。可以用小學所學的方法來設計乙個計算機乘積xy的演算法,但是這樣做計算步驟太多,效率較低。如果將每兩個一位數的乘法或加法看作一步運算,那麼這種方法要進行o(n平方)步運算才能求出乘積xy。下面用分治法來設計更加有效的大整數乘法演算法。

將n位二進位制整數x和y都分為2段,每段的長為n/2位。

如下是主要的偽**的實現:

此式看起來似乎更複雜性,必須減少乘法次數。

上述二進位製大整數乘法同樣可應用於十進位製大整數的乘法以減少乘法次數,提高演算法效率。

Python 實現大整數乘法演算法

我們平時接觸的長乘法,按位相乘,是一種時間複雜度為 o n 2 的演算法。今天,我們來介紹一種時間複雜度為 o n log 3 的大整數乘法 log 表示以 2 為底的對數 介紹原理 karatsuba 演算法要求乘數與被乘數要滿足以下幾個條件,第一,乘數與被乘數的位數相同 第二,乘數與被乘數的位數...

演算法 大整數乘法

問題描述 求兩個不超過200位的非負整數的積。輸入形式 有兩行,每行是乙個不超過200位的非負整數,沒有多餘的前導0。輸出形式 一行,即相乘後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。樣例輸入 1234567890 9876543210 樣例輸出 1219326...

分治演算法 大整數乘法

用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。分析 用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。演算法描述 兩個十進位制的數 x y x a 10 n1 b y c 10 n2 d 則 x y a 10 n1 b c 10 n2 d 設乙個陣列,將其看做10000 進製...