可以推到Gx=−F01i=1∑xFiGx−i
那么可以分治FFT求解G
void solve(int l,int r)//其中a数组对应上面的F
{
if( l+1>=r ) return;
int mid = l+r>>1;
solve(l,mid);
int len = r-l; init(len);
for(int i=1;i<len;i++) g[i] = a[i];
for(int i=l;i<mid;i++) f[i-l] = ans[i];
for(int i=mid;i<r;i++) f[i-l] = 0;
NTT(f,len,1); NTT(g,len,1);
for(int i=0;i<len;i++) f[i] = f[i]*g[i]%mod;
NTT(f,len,-1);
int inv = quick(len,mod-2);
int invv = quick( (-a[0]%mod+mod)%mod,mod-2 );
for(int i=mid;i<r;i++) ans[i] = ( ans[i]+f[i-l]*inv%mod*invv%mod )%mod;
solve(mid,r);
}
代码第七行给g数组赋值的时候
赋值[0,len−1]也是对的,赋值[1,len−1]也是对的
哪个有问题?或者都对......
我的理解是既然Gx=−F01i=1∑xFiGx−i
那么F[0]不应该卷积啊...所以赋值不是[1,len−1]嘛........