FFT

  1. P3803 【模板】多项式乘法(FFT)
/*
雲璃猫猫が好きです
すべての生命よ,歌のように輝いています
截剣式、斬、断、破です!
*/
#include<bits/stdc++.h>
#include<bits/extc++.h>
#define INF 1e18
#define lb double
#define ls (id<<1)
#define rs (id<<1|1)
#define rep(i,l,r,k) for(int i=(l);i<=(r);i+=(k))
#define dep(i,r,l,k) for(int i=(r);i>=(l);i-=(k))
#define tep(ch,cr) for(auto ch:cr)
#define mk(a,b) make_pair(a,b)
#define me(a,b) memset(a,b,sizeof(a))
#define pb(x) push_back(x)
#define pr putchar
#define fi first
#define se second
#define wl while
#define max(a,b)((a)>(b)?(a):(b))
#define min(a,b)((a)<(b)?(a):(b))
using namespace std;
random_device rd;
unsigned int seed=rd();
mt19937 Rand(seed);
typedef pair<int,int> pii;
const int M=5e6+110,mod=1e9+7,Mod=998244353;
__gnu_pbds::gp_hash_table<string,int>ml;
inline int read(){int sum=0,k=1;char c=getchar();
	while(c>'9'||c<'0'){if(c=='-')k=-1;c=getchar();
	}while(c>='0'&&c<='9'){sum=sum*10+c-48;c=getchar();
	}return sum*k;
}inline void wr(int x){if(x<0) putchar('-'),x=-x;
	if(x>9) wr(x/10);return void(putchar(x%10+'0'));}
const lb pi=acos(-1.0);
struct Node{
	lb x,y;
	//A=x+yi
	//复数加减乘
	inline Node operator+(const Node &X)const{
		Node C;
		C.x=X.x+x;C.y=y+X.y;
		return C;
	}
	inline Node operator-(const Node &X)const{
		Node C;
		C.x=x-X.x;C.y=y-X.y;
		return C;
	}
	inline Node operator*(const Node &X)const{
		Node C;
		C.x=(x*X.x)-(y*X.y);
		C.y=(x*X.y)+(y*X.x);
		return C;
	}
}a[M],b[M];
inline void FFT(Node *res,int n,int id){
	if(n==1) return void();//边界
	Node a1[n],b1[n];//分割
	rep(i,0,n-1,2)
		a1[i>>1]=res[i],//奇偶分
		b1[i>>1]=res[i+1];
	FFT(a1,n>>1,id);FFT(b1,n>>1,id);//递归
	Node w=(Node){//增加量
		cos(2.0*pi/(lb)n),
		id*sin(2.0*pi/(lb)n)
	},x=(Node){1,0};
	rep(i,0,(n>>1)-1,1){//回推
		res[i]=a1[i]+x*b1[i];
		res[i+(n>>1)]=a1[i]-x*b1[i];
		x=x*w;
	}
}
int n,m,mx=1;
signed main(){
	n=read(),m=read();
	rep(i,0,n,1) cin>>a[i].x;rep(i,0,m,1) cin>>b[i].x;
	wl(mx<=m+n) mx<<=1;
	FFT(a,mx,1);FFT(b,mx,1);//变点值
	rep(i,0,mx,1) a[i]=a[i]*b[i];//转出新点值
	FFT(a,mx,-1);//转回系数
	rep(i,0,m+n,1)
		wr((int)(a[i].x/mx+0.5)),pr(' ');
	return 0;
}
posted @ 2025-11-14 14:49  rerecloud  阅读(4)  评论(0)    收藏  举报