FFT模板(迭代/递归)
来源:互联网 发布:php编辑器 编辑:程序博客网 时间:2024/06/15 13:43
#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<complex>using namespace std;#define pi acos(-1.0)const int maxn=300010;typedef complex<double>C;C a[maxn],b[maxn];void fft(C *x,int n,int type){ if(n==1) return; C l[n>>1],r[n>>1]; for(int i=0;i<n;i+=2) l[i>>1]=x[i],r[i>>1]=x[i+1]; fft(l,n>>1,type);fft(r,n>>1,type); C wn(cos(2*pi/n),sin(type*2*pi/n)),w(1,0); for(int i=0;i<(n>>1);i++,w*=wn) x[i]=l[i]+w*r[i],x[i+(n>>1)]=l[i]-w*r[i];}int rev[maxn];int n,m;void init(){ for(int i=0;i<n;i++) rev[i]=(rev[i>>1]>>1)|((i&1)?(n>>1):0);}void FFT(C *x,int n,int type){ for(int i=1;i<n;i++) if(i<rev[i]) swap(x[rev[i]],x[i]); for(int k=2;k<=n;k<<=1){ C wn(cos(2*pi/k),sin(type*2*pi/k)); for(int i=0;i<n;i+=k){ C w(1,0); for(int j=0;j<(k>>1);j++){ C l=x[i+j],r=x[i+j+(k>>1)]; x[i+j]=l+w*r; x[i+j+(k>>1)]=l-w*r; w*=wn; } } }}int main(){ scanf("%d%d",&n,&m); for(int i=0;i<=n;i++) scanf("%lf",&a[i].real()); for(int i=0;i<=m;i++) scanf("%lf",&b[i].real()); m+=n; for(n=1;n<=m;n<<=1); init(); FFT(a,n,1);FFT(b,n,1); for(int i=0;i<=n;i++) a[i]*=b[i]; FFT(a,n,-1); for(int i=0;i<=m;i++) printf("%d ",(int)(a[i].real()/n+0.5)); return 0;}
^_^
0 0
- FFT模板(迭代/递归)
- 迭代FFT模板
- Radix-2 迭代FFT
- Radix-2 迭代FFT
- bzoj2179(fft模板)
- FFT(模板)
- 折半查找的c++模板递归和迭代实现
- 二叉树的递归、迭代遍历的模板代码
- C++11:变长模板的迭代与递归扩展
- C++11:变长模板的迭代与递归扩展
- 快速傅里叶变换FFT的迭代实现
- 计算阶乘(递归与迭代)
- 菲波拉契数列(递归与迭代)
- c# fibnacci(递归,迭代)
- 迭代(iteration)和递归
- 迭代(Iteration)与递归(Recursion)
- 二分查找(迭代和递归)
- merging sort(迭代取代递归)
- WSDL数据处理
- [jQuery知识]jQuery之知识五-DOM节点操作
- javaSE_8系列博客——Java语言的特性(三)--类和对象(7)--给方法或者构造器传输信息
- Anaconda多环境多版本python配置指导
- 史上首次!微软为中东土豪迪拜设计专用字体
- FFT模板(迭代/递归)
- 找回密码的思路
- 常用的linux命令和工具
- 缓冲区
- 关于服务器的那些事1
- [jQuery知识]jQuery之知识六-表单操作
- SpringMvc部分注解及用法
- [jQuery知识]jQuery之知识七-事件初级
- MLE (最大似然) 与 LS (最小二乘) 与 MAP (最大后验)