題解
Description
Input
Output
Sample Input
輸入1:
1 1
輸入2:
2 2
Sample Output
輸出1:
2
輸出2:
40
Data Constraint
題解
由題意可列出:
由二項式定理:
原式等價於
不難發現這個式子的指數是k+1級別的
所以使用拉格朗日插值法
貼代碼
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define ll long long
using namespace std;
const int maxn=1e6+5,md=1e9+7;
int yu[maxn];
int i,j,k,l,m,n,x,y,ans,p,tot,mi,bi;
int c1,c2;
int quickmi(int x,int y){
int t1=1,t2=x;
while (y){
if ((y & 1)==1) t1=(1ll*t1*t2)%md;
t2=(1ll*t2*t2)%md;
y=y/2;
}
return t1;
}
int main(){
freopen("dis.in","r",stdin);
freopen("dis.out","w",stdout);
scanf("%d%d",&k,&n);
fo(i,1,k+2) yu[i]=(1ll*i*(md+quickmi(2*i+1,k)-quickmi(2*i-1,k))%md)%md;
fo(i,2,k+2) yu[i]=(yu[i]+yu[i-1])%md;
c1=c2=1;
if (n<=k+2){
printf("%d",yu[n]);
return 0;
}
fo(i,2,k+2){
c1=(1ll*c1*(n-i))%md;
c2=(1ll*c2*(1-i))%md;
}
ans=(ans+yu[1]*((1ll*c1*quickmi(c2,md-2))%md))%md;
mi=-k-1; bi=1;
fo(i,2,k+2){
c1=((ll)c1*quickmi(n-i,md-2))%md;
c1=((ll)c1*(n-i+1))%md;
c2=((ll)c2*quickmi(mi,md-2))%md;
c2=((ll)c2*bi)%md;
mi++; bi++; if (mi==0) mi++;
ans=(ans+yu[i]*(((ll)c1*quickmi(c2,md-2))%md))%md;
}
printf("%d\n",ans);
return 0;
}