模板(组合数取模预处理阶乘逆元)

Posted xiaoxiao179

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板(组合数取模预处理阶乘逆元)相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn = 2e6+50;
ll fac[maxn];
ll inv[maxn];
const int mod = 1e9+7;
ll qpow(long long a,long long b)
{
    ll ans=1;
    ll k=a;
    while(b)
    {
        if(b&1)ans=ans*k%mod;
        k=k*k%mod;
        b>>=1;
    }
    return (ans+mod)%mod;
}
void init(){
    long long i;
    fac[0]=1;
    inv[0]=1;
    fac[1]=1;
    inv[1]=1;
    for (i=2;i<maxn;i++){
        fac[i]=((fac[i-1]*i)%mod+mod)%mod;
        inv[i]=(qpow(fac[i],mod-2)+mod)%mod;
    }
}
ll C(ll n,ll m){
    if (n<m||m<0) return 0;
    return  (fac[n]*inv[m]%mod*inv[n-m]%mod+mod)%mod;
}
int main()
{
	init();
	cout<<C(4,2)<<endl;
}

以上是关于模板(组合数取模预处理阶乘逆元)的主要内容,如果未能解决你的问题,请参考以下文章

知识点:逆元求组合数取模

求组合数

逆元 - 组合数取模

HDU 5698 大组合数取模(逆元)

为什么组合数取模要用逆元

对组合数取模