rt。
指的两种写法分别是:
第一种:
inline void NTT(int*f,int*p){
	for(int i=0;i<n;++i)
		if(rev[i]<i)
			swap(f[i],f[rev[i]]);
	for(int mid=1;mid<n;mid<<=1){
		const int len=mid<<1,Base=p[n/len];
		for(int i=0;i<n;i+=len){
			int tx=1;
			for(int j=0;j<mid;++j){
				int l=i+j,r=l+mid;
				int L=f[l],R=1ll*f[r]*tx%mod;
				f[l]=mo(L+R),f[r]=mo(mod-R+L);
				tx=1ll*tx*Base%mod;
			}
		}
	}
}
第二种:
inline void NTT(int*f,int*p){
	for(int i=0;i<n;++i)
		if(rev[i]<i)
			swap(f[i],f[rev[i]]);
	for(int mid=1;mid<n;mid<<=1){
		const int len=mid<<1,Base=p[n/len];
		int tx=1;
		for(int i=0;i<mid;++i){
			for(int j=0;j<n;j+=len){
				int l=i+j,r=l+mid;
				int L=f[l],R=1ll*f[r]*tx%mod;
				f[l]=mo(L+R),f[r]=mo(mod-R+L);
			}
			tx=1ll*tx*Base%mod;
		}
	}
}
其中两种写法唯一的区别在于里面两层循环的顺序的不同,按理来说,第二种写法的运算次数应该要少一些,但是第一种写法可以跑过【模板】A*B Problem升级版(FFT快速傅里叶),而第二种写法不能。(第二种写法跑第一个点本地测要3s)
有没有人可以解释一下吗?非常感谢!