【学习笔记】组合数

fac数组是阶乘,inv是阶乘逆元,都是mod p意义下的

组合数\(\binom{n}{m}=\frac{n!}{m!(n-m)!}\),所以要求逆元

费马小定理\(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;
}
posted @ 2023-01-11 14:00  liaiyang  阅读(32)  评论(1编辑  收藏  举报