大组合数模板

long long GetInverse(long long a, long long mod)
{
    long long ans = 1, n = mod - 2;
    a %= mod;
    while (n) {
        if (n & 1) {
            ans = ans * a % mod;
        }
        n >>= 1;
        a = a * a % mod;
    }
    return ans % mod;
}

long long C(long long n, long long m, long long mod)
{
    if (m > n) return 0;
    long long ans = 1;
    for (int i = 1; i <= m; i++) {
        long long a = (n + i - m) % mod;
        long long b = i % mod;
        ans = ans * (a * GetInverse(b, mod) % mod) % mod;
    }
    return ans % mod;
}

原文地址:https://www.cnblogs.com/FrankOu/p/14407678.html