组合数取模

来源:互联网 发布:js push array[0] 问题 编辑:程序博客网 时间:2024/05/29 09:14
#include <bits/stdc++.h>using namespace std;const long long mod = 1e9+7;const int maxn = 1e5+10;typedef long long LL;LL fac[maxn];LL modxp(LL a,LL b){    LL res = 1;    while(b)    {        if(b&1)            res = (res*a)%mod;        b = b>>1;        a = (a*a)%mod;    }    return res;}void Init(){    fac[0] = 1;    for(int i = 1; i < maxn; i++)    {        fac[i] = (fac[i-1]*i)%mod;    }}LL C(LL a,LL k){    LL re = 1;    while(a && k)    {        LL aa = a%mod;        LL bb = k%mod;        if(aa<bb)            return 0;        re = re*fac[aa]*modxp(fac[bb]*fac[aa-bb]%mod,mod-2)%mod;        a /= mod;        k /= mod;    }    return re;}int main(){    Init();    LL a, b;    cin >> a >> b;    cout << C(a, b) << endl;    return 0;}