组合数计算模板

Toretto·2022-03-06 15:35·135 次阅读

组合数计算模板

  • mod为模数,maxn为最大值
复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int mod = 1e9+7;
const int maxn = 2e6+5;
ll  fac[maxn],inv[maxn];//储存除模后的阶乘和逆元的值

ll quickpow(ll m,ll n,ll k)// 快速幂return m^n % k
{
    ll b = 1;
    m = m%k;
    while (n > 0)
    {
          if (n & 1)
             b = (b*m)%k;
          n = n >> 1 ;
          m = (m*m)%k;
    }
    return b;
}
 
ll C(ll n, ll m)//计算组合数
{
    return (((fac[n] * inv[m])%mod) * inv[n-m]) % mod;
}

void init()//初始化
{
    fac[0] = 1;
    for(int i = 1; i<=maxn-2; i++)
        fac[i] = (i*fac[i-1])%mod;
    inv[maxn-2] = quickpow(fac[maxn-2],mod-2,mod);
    for(int i = maxn - 3; i>=0; i--)
        inv[i] = ( (i+1) * inv[i+1] ) % mod;
}
复制代码

 

posted @   云憩风霞  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示