求助分治FFT的小细节
查看原帖
求助分治FFT的小细节
299810
issue_is_fw楼主2020/12/21 20:39

可以推到Gx=1F0i=1xFiGxiG_x=-\frac{1}{F_0}\sum\limits_{i=1}^xF_iG_{x-i}

那么可以分治FFTFFT求解GG

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);	
}

代码第七行给gg数组赋值的时候

赋值[0,len1][0,len-1]也是对的,赋值[1,len1][1,len-1]也是对的

哪个有问题?或者都对......

我的理解是既然Gx=1F0i=1xFiGxiG_x=-\frac{1}{F_0}\sum\limits_{i=1}^xF_iG_{x-i}

那么F[0]F[0]不应该卷积啊...所以赋值不是[1,len1][1,len-1]嘛........

2020/12/21 20:39
加载中...