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

快速傅里叶变换

时间:2016-03-11 18:33:11      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

bzoj2179

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<string>
 6 #include<algorithm>
 7 #include<complex>
 8 #define N 250005
 9 using namespace std;
10 typedef complex<double> cd;
11 int a[N],b[N],c[N],lc,n;
12 char s[N];
13 double PI=acos(-1);
14 int bitrev(int t,int n){
15     int res=0;
16     for (int i=0;i<n;i++) res|=(t>>(n-i-1)&1)<<i;
17     return res; 
18 }
19 void fft(cd *a,int n,int rev){
20     static cd y[N];
21     int len=1<<n;
22     for (int i=0;i<len;i++) y[i]=a[bitrev(i,n)];
23     for (int d=1;d<len;d<<=1){
24         cd wn(exp(cd(0,PI*rev/d)));
25         for (int k=0;k<len;k+=d*2){
26             cd w(1,0);
27             for (int i=k;i<d+k;i++,w*=wn){
28                 cd u=y[i],v=w*y[i+d];
29                 y[i]=u+v;
30                 y[i+d]=u-v;
31             }
32         }
33     }
34     if (rev==-1)
35     for (int i=0;i<len;i++) y[i]/=len;
36     for (int i=0;i<len;i++) a[i]=y[i];
37 }
38 void mul(int *a,int la,int *b,int lb,int *c,int &lc){
39     static cd t1[N],t2[N];
40     int len=1,n=0;
41     for (;len<la*2||len<lb*2;len*=2,n++);
42     for (int i=0;i<la;i++) t1[i]=cd(a[i],0);
43     for (int i=0;i<lb;i++) t2[i]=cd(b[i],0);
44     for (int i=la;i<len;i++) t1[i]=cd(0,0);
45     for (int i=lb;i<len;i++) t2[i]=cd(0,0);
46     fft(t1,n,1);
47     fft(t2,n,1);
48     for (int i=0;i<len;i++) t1[i]*=t2[i];
49     fft(t1,n,-1);
50     lc=len;
51     for (int i=0;i<len;i++) c[i]=(int)(t1[i].real()+0.5);
52 }
53 int main(){
54     scanf("%d",&n);
55     scanf("%s",s);
56     for (int i=0;i<n;i++) a[i]=s[n-i-1]-0;
57     scanf("%s",s);
58     for (int i=0;i<n;i++) b[i]=s[n-i-1]-0;
59     mul(a,n,b,n,c,lc);
60     for (int i=0;i<lc;i++) c[i+1]+=c[i]/10,c[i]%=10;
61     for (--lc;lc&&!c[lc];lc--);
62     for (int i=lc;i>=0;i--) printf("%d",c[i]);
63 }

G_word:只要背模板就行了233

快速傅里叶变换

标签:

原文地址:http://www.cnblogs.com/qzqzgfy/p/5266490.html

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