快速傅利葉變換FFT

2022-04-01 10:39:44 字數 2811 閱讀 6691

是lzh學長講過以後,又看了小迪的部落格,才學會的fft

小迪這個部落格太推薦了,一學就會

#include#include

#include

#include

#include

#define maxn 4000010

#define pi (acos(-1.0))

using

namespace

std;

complex

a[maxn],b[maxn];

intid[maxn];

void fft(complex *p,int n,int

f) }

}if(f==-1

)

for(int i=0;idouble

)n;}

intmain()

for(int i=0;i<=m;i++)

m=n+m;n=1

;

int l=0

;

while(n<=m)n<<=1,l++;

for(int i=0;i<=n;i++)id[i]=(id[i>>1]>>1)|((i&1)<<(l-1

)); fft(a,n,

1);fft(b,n,1

);

for(int i=0;i<=n;i++)a[i]=a[i]*b[i];

fft(a,n,-1

);

for(int i=0;i<=m;i++)

printf(

"%d

",(int)(a[i].real()+0.5

));

return0;

}

題意:求兩個長度為50000位的大整數的乘積

解:fft之後進製,並特判為0的情況

注意fft計算時一定要用double型別,結果四捨五入取整數

#include#include

#include

#include

#include

#define maxn 400010

#define pi (acos(-1.0))

using

namespace

std;

complex

a[maxn],b[maxn];

char

s1[maxn],s2[maxn];

intid[maxn],ans[maxn];

void fft(complex *p,int n,int

f) }

}if(f==-1

)

for(int i=0;idouble

)n;}

intmain()

for(int i=0;i)

m=n+m;n=1

;

int l=0

;

while(n<=m)n<<=1,l++;

for(int i=0;i<=n;i++)id[i]=(id[i>>1]>>1)|((i&1)<<(l-1

)); fft(a,n,

1);fft(b,n,1

);

for(int i=0;i<=n;i++)a[i]=a[i]*b[i];

fft(a,n,-1

);

for(int i=0;i1;i++)ans[i]=(int)(a[i].real()+0.5

);

for(int i=m-2;i>0;i--)

}bool flag=0

;

for(int i=0;i1;i++)

if(!flag)printf("0"

); puts(

"");

} return0;

}

oj資料出問題了,我也不知道**能不能過

具體思路見這個部落格:

#include#include

#include

#include

#include

#define pi (acos(-1.0))

#define maxn 400010

using

namespace

std;

double

q[maxn];

complex

f[maxn],g[maxn],h[maxn];

intid[maxn],n;

void fft(complex *p,int n,int

f) }

}if(f==-1

)

for(int i=0;idouble

)n;}

intmain()

for(int i=1;i)

int l=0,n=1,m=(n-1)*2

;

while(n<=m)n<<=1,l++;

for(int i=0;i>1]>>1)|((i&1)<<(l-1

)); fft(f,n,

1);fft(g,n,1);fft(h,n,1

);

for(int i=0;ig[i];

for(int i=0;ig[i];

fft(f,n,-1);fft(h,n,-1

);

for(int i=0;i)

return0;

}

快速傅利葉變換FFT

fft的作用就不多說了,搞訊號處理的人都會用上。fft的由來 傅利葉變換ft 離散傅利葉變換dft 快速傅利葉變換fft。學習資料 1 陳後金的 數字訊號處理 裡面深入淺出,該有的公式都有,程式設計思想也有。2 一篇系統講述傅利葉變換的帖子 3 學生對fft的理解 4 工程人員對fft的簡單明瞭的總...

快速傅利葉變換 FFT

bzoj 2179 fft快速傅利葉 果題 bzoj2194 請計算c k sigma a i b i k 其中 k i n 並且有 n 10 5。a,b中的元素均為小於等於100的非負整數。注意到i 和 i k有奇妙的聯絡 不妨嘗試把b翻轉 然後就變成卷積了。貼個模板 include define...

快速傅利葉變換 FFT

首先說一下我用fft做什麼,我要做的是多項式乘法,或者說,加速多項式乘法。考慮多項式a x j 0n 1aj xj,它一共有 n 項,我們稱它的次數界為 n。假設我們有兩個次數界為 n 的多項式a x 和b x 要求它們的和是非常簡單的,只需要將對應的係數相加,複雜度為o n 如果要求他們的積,則需...