记录编号 |
473216 |
评测结果 |
AAAAAAAAAA |
题目名称 |
求组合数 |
最终得分 |
100 |
用户昵称 |
Hzoi_Mafia |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.298 s |
提交时间 |
2017-11-08 15:03:57 |
内存使用 |
3.36 MiB |
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long L;
L n,m;
L fac[200005],inv[200005];
const L mod(1e9+7);
inline L po(L x,L p){
L ret(1);
while(p){
if(p&1)ret=ret*x%mod;
x=x*x%mod;p>>=1;
}
return ret;
}
inline L get_c(L n,L m){
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
inline L lucas(L n,L m){
if(!m)return 1;
return get_c(n%mod,m%mod)*lucas(n/mod,m/mod)%mod;
}
int main(){
freopen("combination.in","r",stdin);freopen("combination.out","w",stdout);
fac[0]=1;for(int i=1;i<=2e5;++i)fac[i]=fac[i-1]*(L)i%mod,inv[i]=po(fac[i],mod-2);
cin>>n>>m;cout<<lucas(n,m);
}