模板—FFT

Posted al-ca

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板—FFT相关的知识,希望对你有一定的参考价值。

FFT讲解

复数讲解

技术图片
 1 #include<iostream>
 2 #include<cstring>
 3 #include<complex>
 4 #include<cstdio>
 5 #define cp complex<double>
 6 using namespace std;
 7 const double pi=3.14159265358979;
 8 
 9 void FFT(cp *a,int n,int inv)
10     
11     if(n==1)return;
12     int mid=n/2;static cp b[1000100];
13     for(int i=0;i<=mid-1;i++)b[i]=a[i*2],b[i+mid]=a[i*2+1];
14     for(int i=0;i<=n-1;i++)a[i]=b[i];
15     FFT(a,mid,inv);FFT(a+mid,mid,inv);
16     for(int i=0;i<=mid-1;i++)
17     
18         cp x(cos(2*pi*i/n),inv*sin(2*pi*i/n));
19         b[i]=a[i]+x*a[i+mid],b[i+mid]=a[i]-x*a[i+mid];
20     
21     for(int i=0;i<=n-1;i++)a[i]=b[i];
22 
23 int n,m;
24 cp a[1000010],b[1000010];int c[1000010];
25 signed main()
26 
27 //    freopen("1.in","r",stdin);
28 //    freopen("out.out","w",stdout);
29 
30     cin>>n>>m;double tem;
31     for(int i=0;i<=n;i++)scanf("%lf",&tem),a[i]=cp(tem,0);
32     for(int i=0;i<=m;i++)scanf("%lf",&tem),b[i]=cp(tem,0);
33     int len=n+m+1,now=1;
34     for(;;now*=2)if(now>=len)len=now;break;
35     FFT(a,len,1);FFT(b,len,1);
36     for(int i=0;i<len;i++)a[i]*=b[i];
37     FFT(a,len,-1);
38     for(int i=0;i<=n+m;i++)cout<<(int)(a[i].real()/len+0.5)<<" ";
39 
FFT递归版

 

以上是关于模板—FFT的主要内容,如果未能解决你的问题,请参考以下文章

bzoj2179FFT快速傅立叶 FFT模板

FFT模板

洛谷P3803 模板多项式乘法(FFT) fft

模板—FFT

Matlab 模板匹配使用 FFT

FFT&NTT模板