JDOJ 2430: 組合數取模
阿新 • • 發佈:2020-10-20
JDOJ 2430: 組合數取模
Description
Compute: N choose M mod 1000000007.
(0≤M≤N≤2×106)
Input
每個檔案有多組輸入資料,資料組數≤50
每組資料佔一行,分別是兩個正整數N,M
Output
每組測試資料輸出一個結果。
Sample Input
5 1 5 2 0 0
Sample Output
5 10 1
最優解宣告:
題解:
直接按組合數通項求,快速冪求逆元即可AC。
注意讀入。
#include<cstdio> #define int long long using namespace std; const int maxn=2*1e6+10; const int mod=1e9+7; int n,m; int fac[maxn]; int qpow(int a,int b) { int ret=1; while(b) { if(b&1) ret=(ret*a)%mod; b>>=1; a=(a*a)%mod; } return ret%mod; } signed main() { fac[0]=1;fac[1]=1; for(int i=2;i<=maxn;i++) fac[i]=(fac[i-1]*i)%mod; while(scanf("%lld%lld",&n,&m)!=EOF) { int ans=((fac[n]*qpow(fac[m],mod-2))%mod*qpow(fac[n-m],mod-2))%mod; printf("%lld\n",ans); } return 0; }