【模版】组合数学

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mx=2e6;
const int mod=1e9+7;
int n,m;
ll res,fac[mx+5],inv[mx+5];
//相同的字符 x ,取序列中的最后一个 
ll fpow(ll x,ll y) {
	ll mul=1;
	for(;y;y>>=1) {
		if(y&1) mul=mul*x%mod;
		x=x*x%mod;
	}
	return mul; 
} 
ll C(ll x,ll y) {
	return fac[x]*inv[x-y]%mod*inv[y]%mod;
}
ll A(ll x,ll y) {
	return fac[x]*inv[x-y]%mod;
}
ll G(ll x,ll y) {
	return C(x+y-1,y-1);
}
int main() {
//	freopen("data.in","r",stdin);
    fac[0]=1;
	for(int i=1;i<=mx;i++) fac[i]=fac[i-1]*i%mod;
	inv[mx]=fpow(fac[mx],mod-2);
	for(int i=mx;i>=1;i--) {
		inv[i-1]=inv[i]*i%mod;
	}
}
posted @ 2021-07-22 09:26  仰望星空的蚂蚁  阅读(11)  评论(0)    收藏  举报  来源