題意:給定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;
}
}