# 【LuoguP4233】射命丸文的笔记-多项式求逆

$g\left(n\right)=\sum _{i=1}^{n}{C}_{n}^{i}f\left(i\right)g\left(n-i\right)$

$\frac{g\left(n\right)}{n!}=\sum _{i=1}^{n}\frac{f\left(i\right)}{i!}\cdot \frac{g\left(n-i\right)}{\left(n-i\right)!}$
$F\left(x\right)$$\frac{f\left(i\right)}{i!}$的生成函数，$G\left(x\right)$$\frac{g\left(i\right)}{i!}$的生成函数，则有：
$G\left(x\right)=F\left(x\right)G\left(x\right)+1$

$F\left(x\right)=\frac{G\left(x\right)-1}{G\left(x\right)}$

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const ll G=3;
int n,rev[400010];
ll fac[100010],g[400010],s[400010]={0},p[400010]={0};

ll power(ll a,ll b)
{
ll s=1,ss=a;
b=(b%(mod-1)+(mod-1))%(mod-1);
while(b)
{
if (b&1) s=s*ss%mod;
ss=ss*ss%mod;b>>=1;
}
return s;
}

void NTT(ll *a,int n,ll type)
{
for(int i=0;i<=n;i++)
if (i<rev[i]) swap(a[i],a[rev[i]]);
for(int mid=1;mid<n;mid<<=1)
{
ll W=power(G,type*(mod-1)/(mid<<1));
for(int l=0;l<n;l+=(mid<<1))
{
ll w=1;
for(int k=0;k<mid;k++,w=w*W%mod)
{
ll x=a[l+k],y=w*a[l+mid+k]%mod;
a[l+k]=(x+y)%mod;
a[l+mid+k]=(x-y+mod)%mod;
}
}
}
if (type==-1)
{
ll inv=power(n,mod-2);
for(int i=0;i<n;i++)
a[i]=a[i]*inv%mod;
}
}

int calc_rev(int limit)
{
int x=1,bit=0;
while(x<=limit) bit++,x<<=1;
rev[0]=0;
for(int i=1;i<x;i++)
rev[i]=(rev[i>>1]>>1)|((i&1)<<(bit-1));
return x;
}

void calc_inv(int len)
{
if (len==1)
{
s[0]=power(g[0],mod-2);
return;
}
calc_inv((len+1)>>1);

int x=calc_rev(len<<1);
for(int i=0;i<len;i++)
p[i]=g[i];
for(int i=len;i<=x;i++)
p[i]=0;
NTT(p,x,1),NTT(s,x,1);
for(int i=0;i<=x;i++)
s[i]=((2ll*s[i]-p[i]*s[i]%mod*s[i])%mod+mod)%mod;
NTT(s,x,-1);
for(int i=len;i<=x;i++)
s[i]=0;
}

int main()
{
scanf("%d",&n);
fac[0]=1;
for(ll i=1;i<=n;i++)
fac[i]=fac[i-1]*i%mod;

for(ll i=0;i<=n;i++)
g[i]=power(2ll,i*(i-1ll)/2ll)*power(fac[i],mod-2)%mod;
calc_inv(n+1);

g[0]=0;
int x=calc_rev(n<<1);
NTT(g,x,1),NTT(s,x,1);
for(int i=0;i<=x;i++)
g[i]=g[i]*s[i]%mod;
NTT(g,x,-1);
for(ll i=1;i<=n;i++)
{
if (i<=2)
{
if (i==1) printf("1\n");
else printf("-1\n");
}
else
{
g[i]=g[i]*fac[i]%mod;
printf("%lld\n",fac[i-1]*power(2ll,i*(i-3ll)/2ll)%mod*power(g[i],mod-2)%mod);
}
}

return 0;
}
posted @ 2018-07-09 23:05  Maxwei_wzj  阅读(167)  评论(0编辑  收藏  举报