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