fac数组是阶乘,inv是阶乘逆元,都是mod p意义下的
组合数\(\binom{n}{m}=\frac{n!}{m!(n-m)!}\),所以要求逆元
费马小定理\(a^{p-1}\equiv a^p-1\equiv 1\pmod p\),\(aa^{p-2}=a^{p-1}\equiv 1\),所以a的乘法逆元\(\equiv a^{p-2}\pmod p\)
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
const int p=1e9+7;
int power(int x,int k){
int res=1;
while(k){
if(k&1) res=res*x%p;
x=x*x%p;
k>>=1;
}
return res;
}
int fac[N],inv[N];
int c(int n,int m){
return fac[n]*inv[m]%p*inv[n-m]%p;
}
main(){
fac[0]=1;
for(int i=1;i<=N;i++) fac[i]=fac[i-1]*i%p;
inv[N]=power(fac[N],p-2);
for(int i=N-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%p;
return 0;
}
标签:return,组合,int,res,inv,笔记,学习,fac,equiv
From: https://www.cnblogs.com/liaiyang/p/17043526.html