计算 C n / a, b, c 模板

C n / a, b, c :结果为 n! / a! / b! / c!

快速幂算法 ksm :

点击查看代码
ll ksm(ll cur, int times) {
    ll base = cur;
    ll res = 1;
    while (times) {
        if ((times & 1) == 1) {
            res = (res * base) % MOD;
        }
        times >>= 1;
        base = (base * base) % MOD;
    }

    return res;
}

计算阶乘: fac

点击查看代码
ll getFac(vector<ll>& fac, int n) {
    if (fac[n] != -1) return fac[n];
    ll& res = fac[n] = 1;
    for (int i = 2; i <= n; ++i) {
        res = (res * i) % MOD;
    }
    return res;
}

计算 a!, b!, c! 的逆的时候需要用到费马小定理:a!的负 = ksm(fac(a), MOD-2)(ksm函数里面自动带有除余操作)

posted @ 2023-04-18 09:54  Besnnad  阅读(30)  评论(0)    收藏  举报