题意

求$\sum_{i=1}^{n}{C(n,i)*i^k}$,其中$n \leq 10^9 ,k \leq 5000$。


 

思考?

看到$i^k$,k那么小,直接第二类斯特林数。比较简单,就请允许我鸽了吧。

刚开始还想BM,当然T了。


代码

 1 #include<bits/stdc++.h>
 2 #define mod 1000000007
 3 using namespace std;
 4 typedef long long int ll;
 5 const int maxn=5E3+5;
 6 ll n,k,ans,S[maxn][maxn];
 7 inline ll qpow(ll x,ll y)
 8 {
 9     ll ans=1,base=x;
10     while(y)
11     {
12         if(y&1)
13             ans=ans*base%mod;
14         base=base*base%mod;
15         y>>=1;
16     }
17     return ans;
18 }
19 void init()
20 {
21     S[0][0]=1;
22     for(int i=1;i<=k;++i)
23         for(int j=1;j<=k;++j)
24             S[i][j]=(S[i-1][j-1]+S[i-1][j]*(ll)j)%mod;
25 }
26 int main()
27 {
28     ios::sync_with_stdio(false);
29     cin>>n>>k;
30     init();
31     ll now=1;
32     for(int i=0;i<=min(n,k);++i)
33     {
34         ans=(ans+S[k][i]*now%mod*qpow(2,n-i)%mod)%mod;
35         now=now*(n-i)%mod;
36     }
37     if(k==0)
38         --ans;
39     cout<<ans<<endl;
40     return 0;
41 }
View Code

 

 posted on 2019-08-25 21:03  GreenDuck  阅读(177)  评论(0编辑  收藏  举报