分治 大整數乘法(C )

2021-10-06 11:22:38 字數 1731 閱讀 9409

一般計算方法分治法(理想狀態下)

分治法(非理想狀態下)

理想狀態下;

x y=

e∗10

2⌊n/

2⌋+(

g+e+

f)∗1

0⌊n/

2⌋+f

xy=e*10^}+(g+e+f)*10^+f

xy=e∗1

02⌊n

/2⌋+

(g+e

+f)∗

10⌊n

/2⌋+

f非理想狀態下;

x y=

e∗10

⌊nx/

2⌋+⌊

ny/2

⌋+(g

+e∗1

0⌊nx

/2⌋+

⌊ny/

2⌋+f

)+fxy=e*10^+}+(g+e*10^+}+f)+f

xy=e∗1

0⌊nx

​/2⌋

+⌊ny

​/2⌋

+(g+

e∗10

⌊nx​

/2⌋+

⌊ny​

/2⌋+

f)+f

當拆分後的子整數的位數為1時,結束遞迴。

理想狀態下;

// 大整數乘法--理想狀態

#include

#include

using

namespace std;

intsign

(long a)

;long

bigintmultiply_ideal

(long x,

long y,

int n)

;int

main()

intsign

(long a)

long

bigintmultiply_ideal

(long x,

long y,

int n)

}

非理想狀態下;

// 大整數乘法--非理想狀態

#include

#include

using

namespace std;

intsign

(long a)

;long

bigintmultiply_nonideal

(long x,

long y,

int n_x,

int n_y)

;int

main()

intsign

(long a)

long

bigintmultiply_nonideal

(long x,

long y,

int n_x,

int n_y)

}

理想狀態下;

非理想狀態下;

(注:執行計算的整數並不足夠大,這裡僅僅是舉個栗子!)

分治 大整數乘法

第一次自己完整寫對,多多指教 演算法思路 分治。第一步 經過預處理將兩個整數變為長度一樣的兩個數 短的在前面補0 第二部 把兩個大整數都平分為前後兩部分 第三部 按以下公式計算 實現大數乘法之前實現了大數加減法 公式 x a 10 n 2 b y c 10 n 2 d xy ac 10 n a b ...

分治 大整數乘法

問題描述 設x和y是兩個n位的二進位制整數,現在要計算它們的乘積xy,傳統方法計算每2個1位數乘法或加法都看作一步運算,這樣需要o n2 次位運算,代價太高,現在運用分治法設計乙個更有效的大整數乘法演算法。當n 1時,計算x y就是一次位乘。現在對x y進行劃分,把x和y各分為兩段,每段長為n 2 ...

分治演算法 大整數乘法

用分治演算法程式設計實現兩個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 進製...