hdu1402 大数相乘 快速傅里叶变换FFT
来源:互联网 发布:人工神经网络知乎 编辑:程序博客网 时间:2024/06/05 12:42
FFT入门题,FFT模板
#include <iostream>#include <stdio.h>#include <cmath>#include <algorithm>#include <cstring>#include <vector>using namespace std;#define N 50500*2const double PI=acos(-1.0);struct Vir{ double re,im; Vir(double _re=0.,double _im=0.):re(_re),im(_im){} Vir operator*(Vir r) { return Vir(re*r.re-im*r.im,re*r.im+im*r.re);} Vir operator+(Vir r) { return Vir(re+r.re,im+r.im);} Vir operator-(Vir r) { return Vir(re-r.re,im-r.im);}};void bit_rev(Vir *a,int loglen,int len){ for(int i=0;i<len;++i) { int t=i,p=0; for(int j=0;j<loglen;++j) { p<<=1; p=p|(t&1); t>>=1; } if(p<i) { Vir temp=a[p]; a[p]=a[i]; a[i]=temp; } }}void FFT(Vir *a,int loglen,int len,int on){ bit_rev(a,loglen,len); for(int s=1,m=2;s<=loglen;++s,m<<=1) { Vir wn=Vir(cos(2*PI*on/m),sin(2*PI*on/m)); for(int i=0;i<len;i+=m) { Vir w=Vir(1.0,0); for(int j=0;j<m/2;++j) { Vir u=a[i+j]; Vir v=w*a[i+j+m/2]; a[i+j]=u+v; a[i+j+m/2]=u-v; w=w*wn; } } } if(on==-1) { for(int i=0;i<len;++i) a[i].re/=len,a[i].im/=len; }}char a[N*2],b[N*2];Vir pa[N*2],pb[N*2];int ans[N*2];int main (){ while(scanf("%s%s",a,b)!=EOF) { int lena=strlen(a); int lenb=strlen(b); int n=1,loglen=0; while(n<lena+lenb) n<<=1,loglen++; for(int i=0,j=lena-1;i<n;++i,--j) pa[i]=Vir(j>=0?a[j]-'0':0.,0.); for(int i=0,j=lenb-1;i<n;++i,--j) pb[i]=Vir(j>=0?b[j]-'0':0.,0.); for(int i=0;i<=n;++i) ans[i]=0; FFT(pa,loglen,n,1); FFT(pb,loglen,n,1); for(int i=0;i<n;++i) pa[i]=pa[i]*pb[i]; FFT(pa,loglen,n,-1); for(int i=0;i<n;++i) ans[i]=pa[i].re+0.5; for(int i=0;i<n;++i) ans[i+1]+=ans[i]/10,ans[i]%=10; int pos=lena+lenb-1; for(;pos>0&&ans[pos]<=0;--pos) ; for(;pos>=0;--pos) printf("%d",ans[pos]); puts(""); } return 0;}
- hdu1402 大数相乘 快速傅里叶变换FFT
- FFT 快速傅里叶变换 hdu1402 hdu4609
- hdu1402 A*B 快速傅里叶变换(FFT)
- HDU1402 A * B Problem Plus 大数乘法 FFT(快速傅里叶变换)优化
- hdu1402 A * B Problem Plus 高精度乘法 快速傅里叶变换(FFT)
- hdu1402 FFT 大数乘法
- 【FFT】大数乘法 hdu1402
- hdu1402-大数相乘
- 【HDU1402】 【FFT求大数乘法】
- 【HDU1402】 【FFT求大数乘法】
- 大数乘法和快速傅里叶变换FFT
- FFT 模板 大数相乘
- 大数相乘FFT
- hdu1402 傅里叶变换
- 大数乘法 poj 2389 ||大数乘法 hdu1402 FFT模板
- 快速傅里叶变换(FFT)(ZZ)
- FFT快速傅里叶变换;
- 快速傅里叶变换(FFT)
- Linux下获取服务器出口IP
- 自定义控件相关
- android Paint属性
- C++面试中string类的一种正确简明的写法
- 使用OCCI遇到的几个问题
- hdu1402 大数相乘 快速傅里叶变换FFT
- Java中静态变量与实例变量的区别 静态变量活用实现类似session的功能
- 深入解析API(java.util.Properties)
- EL表达式
- linux getopt 和getopt_long详解
- 抽象类与接口
- Android WebView的Js对象注入漏洞解决方案
- pthread创建RR线程
- Struts2 高危漏洞修复方案 (S2-016/S2-017)