FFT, 大數乘法

2021-09-27 07:12:16 字數 2346 閱讀 4046

多項式係數表示法:

多項式點值表示法

係數表示法算多項式乘法的時間複雜度是o(n^2),而通過點值表示法我們可以發現兩個多項式p,q,同時取點x時,得到的是y1和y2,即取到的點分別為(x,y1),(x,y2)而pq會取到的點為(x,y1y2),那麼計算p*q的點表示式的時間複雜度就是o(n)的。

fft就是將係數表示法轉化成點值表示法相乘,再由點值表示法轉化為係數表示法的過程,第乙個過程叫做求值(dft),第二個過程叫做插值(idft)

模板:

//r這是乙個陣列,用於儲存二進位制反轉的結果

//#define il inline

const

double pi =

acos(-

1.0)

;//圓周率pai

struct node

}a[maxn]

, b[maxn]

; node operator *

(node j, node q)

node operator +

(node j, node q)

node operator -

(node j, node q)

il void

fft(node *j,

double flag)}}

}//在上面涉及到乙個r陣列,

void

getr

(int bit)

//傳入的bit,找到第乙個二的整數次冪使得其可以容納這兩個數的乘積,是陣列的

bit =

1, lim =2;

//bit--第乙個二的整數次冪使得其可以容納這兩個數的乘積,lim = 2^bit;

for(bit=1;

(1<

1;bit++

)lim<<=

1;

例子:

題目描述

給出兩個n位10進製整數x和y,你需要計算x*y。

輸入格式

第一行乙個正整數n。 第二行描述乙個位數為n的正整數x。 第三行描述乙個位數為n的正整數y。

輸出格式

輸出一行,即x*y的結果。(注意判斷前導0)

解析:每乙個整數都可以寫成:a0 + a1 * 10 + a2 * 10 ^2 ````````

#include

#include

#include

#define il inline

#define maxn 200100

using namespace std ;

char s1[maxn]

, s2[maxn]

;int n, m, k, res =

0, ans[maxn]

, aa, bb ;

int i, j, k, l, l, r[maxn]

;const

double pi =

acos(-

1.0)

;int bit =

1, lim =2;

struct node

}a[maxn]

, b[maxn]

;//a,b 表示兩個多項式、

node operator *

(node j, node q)

node operator +

(node j, node q)

node operator -

(node j, node q)

il intqr(

)while

(isdigit

(c)) k =

(k <<1)

+(k <<3)

+ c -

48,c =

getchar()

;return k * f ;

} il void

fft(node *j,

double flag)}}

}void

getr

(int bit)

intmain()

while

(!ans[lim]

&& lim >=

1) lim --

; lim ++

;while

(-- lim >=

0) cout << ans[lim]

;return0;

}

HDU 1402 大數乘法 FFT

大整數乘法,給定兩個長度不超過10000的整數,返回乘法的結果。char multi char number a,char number b 有疑問歡迎提問,本人學通訊的,手上有 數字訊號處理 書,可以把圖搬出來解答的 include stdafx.h include include include...

HDU 1402 FFT模板題,求大數乘法

這兩天剛開始看fft,有點雲裡霧裡的,今天看了個模板題,覺得這位聚聚寫得特別好,總算是看懂了多項式相乘之類的運算,存一下。好點複雜一點的演算法,資料結構都不知道,還要慢慢學習。fft模板 define l x 1 x const double pi acos 1.0 const int maxn 1...

FFT高精度乘法

眾所周知,fft fast fourier transformation 即為快速傅氏變換,是離散傅氏變換的快速演算法,它是根據離散傅氏變換的奇 偶 虛 實等特性,對離散傅利葉變換的演算法進行改進獲得的.那麼我們用這個nb的演算法解決一些什麼沙雕問題呢qwq?沒錯!就是大名鼎鼎的高精度乘法 fft太...