题目:
看博客:
注意取模那里的 NTT 范围就是模数的次数;
各处注意一下对系数数组取模(超出的位置赋0)。
代码如下:
#include#include #include #include using namespace std;typedef long long ll;int const xn=(1<<18),g=3,mod=998244353;int n,m,a[xn],b[xn],d[xn],r[xn],rev[xn],c[xn],t[xn];int rd(){ int ret=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=0; ch=getchar();} while(ch>='0'&&ch<='9')ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar(); return f?ret:-ret;}ll pw(ll a,int b){ ll ret=1; for(;b;b>>=1,a=(a*a)%mod)if(b&1)ret=(ret*a)%mod; return ret;}int upt(int x){ while(x>=mod)x-=mod; while(x<0)x+=mod; return x;}void ntt(int *a,int tp,int lim){ for(int i=0;i >1,a,b); int lim=1,l=0; while(lim<=n+n)lim<<=1,l++; for(int i=0;i >1]>>1)|((i&1)<<(l-1))); for(int i=0;i >1]>>1)|((i&1)<<(l-1))); for(int i=0;i >1]>>1)|((i&1)<<(l-1))); for(int i=0;i