求排列组合中的 C(n,m):
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int MAX = 1e6+10;
const int INF = 0x3fffffff;
const int MOD = 1e9+7;
int a[MAX];
LL qkm(LL a, LL b){
LL r =1,base = a %MOD;
while(b){
if(b&1) r=r*base%MOD;
base=base*base%MOD;
b>>=1;
}
return r%MOD;
}
void init(){
a[0]=1;
for(int i=1;i<=MAX;i++){
a[i]=a[i-1]*i;
a[i]%=MOD;
}
}
LL C(int n,int m){
LL ans ;
if(n==0) ans=0;
else ans=((a[n]*qkm((a[n-m]*a[m])%MOD,MOD-2))%MOD);
return ans;
}
int main(){
LL n,m;
init();
while(scanf("%lld%lld",&n,&m)!=EOF){
cout<<C(n,m)<<endl;
}
return 0;
}