多项式求逆元模板
2018-01-15 22:54
225 查看
多项式求逆元具体概念及求法可见这里,本文主要提供模板。
本文提供的是模998244353下保留0~n次项,即mod(xn+1)意义下的模板。
本文提供的是模998244353下保留0~n次项,即mod(xn+1)意义下的模板。
#include<bits/stdc++.h> #define ll long long using namespace std; int getint() { int i=0,f=1;char c; for(c=getchar();c!='-'&&(c<'0'||c>'9');c=getchar()); if(c=='-')f=-1,c=getchar(); for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0'; return i*f; } const int N=500005,p=998244353,g=3; int n,a ,b ,pos ,w ,inv ; int Pow(int x,int y) { int res=1; for(;y;y>>=1,x=(ll)x*x%p) if(y&1)res=(ll)res*x%p; return res; } void Init() { int len=1,num=0; while(len<((n+1)<<1)) { len<<=1; w[++num]=Pow(g,(p-1)/len); inv[num]=Pow(w[num],p-2); } } void NTT(int f[],int len,int on) { for(int i=1;i<len;i++) pos[i]=(i&1)?pos[i>>1]>>1|(len>>1):pos[i>>1]>>1; for(int i=1;i<len;i++) if(i<pos[i])swap(f[i],f[pos[i]]); for(int i=1,num=1;i<len;i<<=1,num++) { int wn=(on==1?w[num]:inv[num]); for(int j=0;j<len;j+=(i<<1)) { int wi=1; for(int k=j;k<j+i;k++) { int u=f[k],v=(ll)wi*f[k+i]%p; f[k]=(u+v)%p,f[k+i]=(u-v+p)%p; wi=(ll)wi*wn%p; } } } if(on==-1) for(int i=0;i<len;i++) f[i]=(ll)f[i]*Pow(len,p-2)%p; } void Poly_inv(int a[],int b[],int deg) { if(deg==1) { b[0]=Pow(a[0],p-2); return; } Poly_inv(a,b,(deg+1)>>1); static int tmp ; int len=1; while(len<(deg<<1))len<<=1; for(int i=0;i<deg;i++)tmp[i]=a[i]; for(int i=deg;i<len;i++)tmp[i]=0; for(int i=(deg+1)>>1;i<len;i++)b[i]=0; NTT(tmp,len,1),NTT(b,len,1); for(int i=0;i<len;i++)b[i]=(ll)b[i]*((2-(ll)tmp[i]*b[i]%p+p)%p)%p; NTT(b,len,-1); } int main() { //freopen("lx.in","r",stdin); n=getint(); Init(); for(int i=0;i<=n;i++)a[i]=getint(); Poly_inv(a,b,n+1); for(int i=0;i<=n;i++)cout<<b[i]<<' '; return 0; }
相关文章推荐
- bzoj3456 城市规划【生成函数+多项式求逆元】
- 模板之快速幂和求逆元
- BZOJ 3456: 城市规划 [多项式求逆元 组合数学 | 生成函数 多项式求ln]
- 逆元模板
- NTT和多项式各种基础运算模板
- 扩展欧几里德,求逆元模板
- (模板)多项式乘法对任意数取模
- 模板 2018-01-27 数论 最大公因数 最小公倍数 拓展欧几里得 GCD LCM 逆元
- BZOJ3684:大朋友和多叉树(拉格朗日反演+多项式逆元+ntt)
- [uoj 34 多项式乘法] FFT&NTT 模板
- 邝斌的ACM模板(求逆元)
- bzoj3456/jzoj3303:城市规划(画柿子+多项式逆元+NTT)
- 逆元模板
- HDU 3049 求逆元模板
- 洛谷P3803 【模板】多项式乘法(FFT)
- 洛谷P3803 【模板】多项式乘法(FFT) 【fft】
- 【NTT模板】[UOJ#34]多项式乘法
- HDU 4305 Lightning (矩阵行列式求生成树个数+高斯逆元求行列式模板)
- HDU-1576 A/B 【逆元模板题】
- 逆元模板总结