组合数 模板

Lucas定理 mod小于10^5
namespace Lucas
{
    inline long long qpow(long long a, long long x, long long mod)
    {
        long long res = 1;
        while (x)
        {
            if (x & 1)  res = (res * a) % mod;
            a = (a * a) % mod;
            x >>= 1;
        }
        return res;
    }
    inline long long C(long long n, long long m, long long mod)
    {
        if (n < m)
            return 0;
        if (m > n - m)
            m = n - m;
        long long a = 1, b = 1;
        for (int i = 0; i < m; i++)
        {
            a = a * (n - i) % mod;
            b = b * (i + 1) % mod;
        }
        return a * qpow(b, mod - 2, mod) % mod;
    }
    long long lucas(long long a, long long b, long long mod) 
    {
        if (b == 0) return 1;
        return C(a % mod, b % mod, mod) * lucas(a / mod, b / mod, mod) % mod;
    }
}
逆元求组合数
namespace C
{
    const long long maxn = 100005;
    long long p[maxn], inv[maxn];
    inline long long qpow(long long a, long long b, long long mod)
    {
        long long ans = 1;
        while (b)
        {
            if (b & 1) ans = ans * a % mod;
            a = a * a % mod;
            b >>= 1;
        }
        return ans;
    }
    inline void init(long long mod)
    {
        p[0] = 1;
        for (long long i = 1; i < maxn; i++)    p[i] = p[i - 1] * i % mod;
        inv[maxn - 1] = qpow(p[maxn - 1], mod - 2, mod);
        for (int i = maxn - 1; i > 0; --i)      inv[i - 1] = inv[i] * i % mod;
    }
    inline long long C(int a, int b, long long mod)
    {
        if (a == b)
            return 1;
        else if (a < 0 || b < 0 || a < b)
            return 0;
        else
            return p[a] * inv[b] % mod * inv[a - b] % mod;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 归去来兮。 1.1 说明 本篇为《挑战程序设计竞赛(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy阅读 14,431评论 0 160
  • 01 城里头规划,为了评得绿色城市的称号,土木兴得满城是烟尘四起。 沿江路一带还需要老树来撑场面,挑来挑去,看中了...
    我叫阿嘉阅读 391评论 0 1
  • 昨天参加了行动派上海朋友圈斜杠青年的分享会,来了小六,秋叶等多位知识网红,干货颇多。 但让我意识到自己与斜杠大咖们...
    钱多萝阅读 477评论 2 5
  • 蒨sindia阅读 98评论 0 0
  • 文/爱睡觉的猫 第一话`你真的回来了 手表上指针转过好几圈,站在接机...
    Nanei阅读 1,004评论 1 2