题意:给定n,m,k对二项分布 x~B(n,1/m),求 E(x^k)
n,m<998244353,k<=5005
首先:E(x^k)!=(E(x))^k
思路:由期望公式得:
由第二类斯特林降幂得:(将i^k拆开,S(k,j)为第二类斯特林数)
交换求和顺序:
化简:( j>k时S(k,j)=0 所以枚举到min(n,k),然后后面将组合数拆开)
化简:(令i=i+j)
化简:(凑n-j的二项式展开,把p^j提出来)
我们代入k=1,E(x)=n*p 刚好是我们熟悉的二项分布期望w
实现:我们分别预处理第二类斯特林数与n!/(n-j)!即可 (模998244353) 若k<=1e5有别的做法
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//System.out.println(qmod(2,5,100));
long S[][]=new long[5005][5005];
long mod=998244353;
S[1][1]=1;
S[0][0]=0;
for(int i=1;i<=5000;i++){
S[i][i]=1;S[i][0]=0;
}
for(int i=2;i<=5000;i++){
for(int j=1;j<=i;j++){
S[i][j]=(S[i-1][j]*j%mod+S[i-1][j-1])%mod;
}
}
long n=sc.nextLong();long m=sc.nextLong();int k=sc.nextInt();
m=qmod(m,mod-2,mod);
long dp[]=new long[5005];dp[0]=1;
for(int i=1;i<=Math.min(n,k);i++)dp[i]=dp[i-1]*(n-i+1)%mod;
long ans=0;
for(int i=1;i<=Math.min(n,k);i++){
ans=(ans+dp[i]*qmod(m,i,mod)%mod*S[k][i]%mod)%mod;
}
System.out.println(ans);
}
public static long qmod(long a,long b,long mod){
long ans=1;
while(b>=1){
if((b&1)!=0){
ans=ans*a%mod;
}
a=a*a%mod;
b=b>>1;
}return ans;
}
}