// luogu-judger-enable-o2·
/*(
ntt 模板
luogu P3803
in:
n , m
0,...,a[n]
0,...,b[m]
example:
1 2
1 2
1 2 1
1 4 5 2
*/
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define int long long
void in(int &x){
x=0;char c=getchar();
long long y=1;
while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
x*=y;
}
void o(int x){
if(x<0){x=-x;putchar('-');}
if(x>9)o(x/10);
putchar(x%10+'0');
}
const int _ = 1e7+10;
const int mod = 998244353;//模数
const int G = 3;//原根
int ppo(int x,int p){
int t=x,res=1;
while(p>0){
if(p&1)res=(res*t)%mod;
t=(t*t)%mod;
p>>=1;
}
return res%mod;
}
int n,m;
int limit = 1 , bit;
int a[_],b[_];
int r[_];
void ntt(int *A,int type)
{
for(int i=0;i<limit;i++)if(i<r[i])swap(A[i],A[r[i]]);
for(int mid = 1;mid < limit;mid<<=1){//当前区间的一半
int wn = ppo(type==1 ? G:ppo(G,mod-2),(mod-1)*ppo(mid<<1,mod-2)%mod);
for(int R = mid << 1,j = 0;j < limit;j+=R){//回溯区间大小 最大不超过 limit
int w = 1;
for(int k = 0 ;k<mid;k++,w=w*wn%mod){
int x = A[j+k],y = w*A[j+mid+k]%mod;
A[j+k]=x+y,A[j+k]%=mod;
A[j+k+mid]=x-y+mod,A[j+k+mid]%=mod;
}
}
}
}
signed main() {
in(n);in(m);
for(int i = 0;i <= n;i++)cin>>(a[i]),a[i]=(a[i]+mod)%mod;
for(int j = 0;j <= m;j++)cin>>(b[j]),b[j]=(b[j]+mod)%mod;
while (limit<=n+m)limit<<=1,bit++;
for(int i = 0 ;i<limit;i++){
r[i]=(r[i>>1]>>1)|((i&1)<<(bit-1));//反转序列
}
ntt(a,1);
ntt(b,1);
for(int i=0;i<=limit;i++)a[i]=a[i]*b[i]%mod;//y;
ntt(a,-1);
int inv = ppo(limit,mod-2);//n 的逆元 除n运算
for(int i=0;i<=n+m;i++){
printf("%lld ",a[i]*inv%mod);
}
return 0;
}
快速数论变换ntt
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
BZOJ 3992 Sdoi2015 序列统计 快速数论变换
题目大意:给定n(n求原根,对S集合内每个元素取指标,然后搞出生成函数f(x)那么答案就是(f(x))^n (mod 1004535809)上NTT用多项式快速幂
BZOJ BZOJ3992 快速数论变换 数论 i++ -
bzoj 2179 FFT快速傅立叶(NTT)
NTT
#include #define Memory -
快速傅里叶变换
用途在O(nlogn)O(nlog_n)O(nlogn)复杂度内解决多项式乘法 比O(N2)O(N^2)O(N2)要优A(x)=a0+a1x+...+anxn
线性代数 算法 i++ #include c++ -
数论--快速幂取模
数论计算中经常出现的一种运算就是求一个数的幂ab对另外一个数n个模的运算,即计算:ab mod n (a,b,n是正整数) 由于计算机只能表示有限
acm 数论 #include #define 分治法 -
数学--数论--快速乘法+快速幂
1.快速幂(快速模幂)①求a^b:int p...
取模 快速幂 快速乘法 高效算法 学习