题意:n<=1e5
输出g(x)的各项系数
思路:我们考虑第d项的系数gd,其中gd是由n个卷积的和组成
我们考虑第i个卷积:
其中aj是i阶导数的x^j的系数 ,bj是n-i-1阶导数的x^j的系数
接下来我们算aj bj的柿子
aj=,此aj非彼aj..
bj=
将aj, b(d-j)代入到gdi的柿子里 我们有
令i=i+j ->
进一步化简->
至此两个sum之间相互独立,且都满足卷积形式,两次NTT即可
核心代码:ww[i]就是输入的f的系数,inv[i]是阶乘的逆元
//3.NTT 灵活操作 ai bi的表达式
for (int i=0;i<n;++i) a[i]=inv[i];
for (int i=0;i<n;++i) b[i]=inv[i];
for (int i=0;i<2*n;++i)c[i]=1ll*ww[i]*jc[i]%mod;
for (int i=0;i<2*n;++i)d[i]=1ll*ww[i]*jc[i]%mod;
//4.NTT 固定操作 ai卷积bi
//也就是(a0+a1x+a2x^2...)*(b0+b1x+b2x^2....)=(c0+c1x+c2x^2....),
//其中ck=sum_{j=0...k}aj*b(k-j)
//也就是说求sum_{i=0~n}sum_{j=0~i}aj*b(i-j)可以nlogn 求出来
ntt(a,1);ntt(b,1);
for (int i=0;i<=len;++i) a[i]=1ll*a[i]*b[i]%mod;
ntt(a,-1);
ntt(c,1);ntt(d,1);
for (int i=0;i<=len;++i) c[i]=1ll*c[i]*d[i]%mod;
ntt(c,-1);
//for(int i=1;i<=len;i++)printf("%d %d\n",c[i],a[i]);
//5.NTT 非固定操作 计算求和表达式的答案ans
for (int i=0;i<=n-1;++i) printf("%lld ",1ll*c[n+i-1]*a[i]%mod);puts("");
return 0;