Loading

LOJ #6485. LJJ 学二项式定理

LOJ #6485. LJJ 学二项式定理

单位根反演练手题。

\[\sum_{i=0}^{n}\binom{n}{i}s^ia_{i\bmod 4}\\ \sum_{j=0}^{3}\sum_{i=0}^{n}[i\bmod 4=j]s^ia_j\binom{n}{i}\\ =\sum_{j=0}^{3}\sum_{i=0}^{n}\dfrac{1}{4}\sum_{k=0}^{3}\omega_{4}^{ik}\omega_{4}^{-jk}s^ia_j\binom{n}{i}\\ =\dfrac{1}{4}\sum_{j=0}^{3}\sum_{k=0}^{3}\omega_{4}^{-jk}a_j\sum_{i=0}^{n}\binom{n}{i}(\omega_{4}^{k}s)^i\\ =\dfrac{1}{4}\sum_{j=0}^{3}\sum_{k=0}^{3}\omega_{4}^{-jk}a_j(\omega_{4}^{k}s+1)^{n}\\ \]

\(\bmod 998244353\) 意义下 \(\omega_{4}^{1}\)\(g^{\frac{mod-1}{4}}\) (原根)有同样的性质,直接用后者就好了。

#define mod 998244353
inline int qpow(int n,int k){int res=1;for(;k;k>>=1,n=1ll*n*n%mod)if(k&1)res=1ll*n*res%mod;return res;}
inline void fmod(int&x){x-=mod,x+=x>>31&mod;}
const int iv4=qpow(4,mod-2);
int s,a[4],w[4],ans;
LL n;
void Main(){
	ans=0;
	scanf("%lld%d%d%d%d%d",&n,&s,&a[0],&a[1],&a[2],&a[3]);
	rep(j,0,3)rep(k,0,3){
		int x=1ll*a[j]*w[(16-j*k)%4]%mod;
		int y=qpow((1ll*w[k]*s+1)%mod,n%(mod-1));
		fmod(ans+=1ll*x*y%mod);
	}
	ans=1ll*ans*iv4%mod;
	printf("%d\n",ans);
}
signed main(){
	w[0]=1,w[1]=qpow(3,(mod-1)/4),w[2]=1ll*w[1]*w[1]%mod,w[3]=1ll*w[1]*w[2]%mod;
	for(int T=read();T;--T)Main();
}

posted @ 2021-03-14 16:19  zzctommy  阅读(70)  评论(0编辑  收藏  举报