码迷,mamicode.com
首页 > 其他好文 > 详细

模板—FFT

时间:2019-09-17 16:00:59      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:string   break   stat   ble   blog   stream   iostream   detail   type   

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

标签:string   break   stat   ble   blog   stream   iostream   detail   type   

原文地址:https://www.cnblogs.com/Al-Ca/p/11534361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!