FFT快速傅里叶

来源:互联网 发布:刚柔流空手道 知乎 编辑:程序博客网 时间:2024/06/16 02:12

传送门
表示只会抄板子,看了个半懂。。
我因为重载运算符出了点儿问题,调了好久好久……
贴代码:

#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>using namespace std;inline int read(){    int x=0;char ch=' ';int f=1;    while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();    if(ch=='-')f=-1,ch=getchar();    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();    return x*f;}const int N=2e5+5;const double pi=acos(-1);struct cp{    double r,i;    cp(){}    cp(double _r,double _i):r(_r),i(_i){}    friend cp operator + (const cp& a,const cp& b){return cp(a.r+b.r,a.i+b.i);}    friend cp operator - (const cp& a,const cp& b){return cp(a.r-b.r,a.i-b.i);}    friend cp operator * (const cp& a,const cp& b){return cp(a.r*b.r-a.i*b.i,a.r*b.i+a.i*b.r);}}a[N],b[N];int n,L,R[N],c[N];char ch[N];inline void FFT(cp *a,int f){    for(int i=0;i<n;++i)if(i<R[i])swap(a[i],a[R[i]]);    for(int i=1;i<n;i<<=1){        cp wn(cos(pi/i),f*sin(pi/i));        for(int j=0;j<n;j+=(i<<1)){            cp w(1,0);            for(int k=0;k<i;++k,w=w*wn){                cp x=a[j+k],y=w*a[j+k+i];                a[j+k]=x+y;a[j+k+i]=x-y;            }        }    }    if(f==-1)for(int i=0;i<n;++i)a[i].r/=n;}int main(){    n=read()-1;    scanf("%s",ch);for(int i=0;i<=n;++i)a[i].r=ch[n-i]-'0';    scanf("%s",ch);for(int i=0;i<=n;++i)b[i].r=ch[n-i]-'0';    int m=(n<<1);for(n=1;n<=m;n<<=1)++L;    for(int i=0;i<n;++i)R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));    FFT(a,1);FFT(b,1);    for(int i=0;i<=n;++i)a[i]=a[i]*b[i];    FFT(a,-1);    for(int i=0;i<=m;++i)c[i]=(int)(a[i].r+0.5);    for(int i=0;i<=m;++i)if(c[i]>=10){c[i+1]+=c[i]/10;c[i]%=10;if(i==m)++m;}    while(m){if(c[m])break;else m--;}    while(~m)putchar(c[m--]+'0');    return 0;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 计算机编程语言 编程需要英语好吗 什么是电脑编程 安卓编程软件 编程属于什么专业 编程是什么专业 编程入门软件 如何编程自学 手机编程工具 学编程要多久 编程软件手机版 编程能干什么 学习编程有什么用 学编程有什么用 编程要学哪些 零基础学编程 网络编程是做什么的 在线编程学习网站 java在线编程 怎么学好编程 程序编程软件 自学编程怎么入门 学习软件编程 怎么样学习编程 学习计算机编程入门 什么是网络编程 学编程能干什么 如何学会编程 零基础自学编程 单片机编程入门 什么是编程教育 编程要学多久 编程一般用什么软件 编程入门知识 编程有多少种 怎么学会编程 自学编程要多久 如何编程软件 编程快速入门 程序编程自学 java编程教学