#include<bits/stdc++.h>
#define N 262145
#define pi acos(-1)
using namespace std;
typedef complex<double> E;
int R[N];
E a[N],b[N];
int lenth=1,Reverse[N];
inline void init(int x)
{
int tim=0;
while(lenth<=x)lenth<<=1,tim++;
for(int i=0;i<lenth;i++)Reverse[i]=(Reverse[i>>1]>>1)|((i&1)<<(tim-1));
}
inline void FFT(E *A,int fla)
{
for(int i=0;i<lenth;i++)if(i<Reverse[i])swap(A[i],A[Reverse[i]]);
for(int i=1;i<lenth;i<<=1)
{
E w(cos(pi/i),fla*sin(pi/i));
for(int j=0;j<lenth;j+=(i<<1))
{
E K(1,0);
for(int k=0;k<i;k++,K=K*w)
{
E x=A[j+k],y=A[j+k+i]*K;
A[j+k]=x+y;
A[j+k+i]=x-y;
}
}
}
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
init(n+m);
int x;
for(int i=0;i<=n;i++)scanf("%d",&x),a[i]=x;
for(int i=0;i<=m;i++)scanf("%d",&x),b[i]=x;
FFT(a,1),FFT(b,1);
for(int i=0;i<lenth;i++)a[i]=a[i]*b[i];
FFT(a,-1);
for(int i=0;i<=n+m;i++) printf("%d ",(int)(a[i].real()/lenth+0.5));
return 0;
}
fft解决多项式相乘
猜你喜欢
转载自blog.csdn.net/CC_1012/article/details/91047449
今日推荐
周排行