关于 组合数 C 的板子
  • 板块学术版
  • 楼主LZX_ssfd
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/4/3 14:23
  • 上次更新2023/10/28 04:45:39
查看原帖
关于 组合数 C 的板子
289436
LZX_ssfd楼主2022/4/3 14:23

我的代码只会输0,求查

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e6+10,p=1e9+7;
ll fac[maxn],inv[maxn];
int n,m;
ll pow(ll a,ll b) {
	ll res=1;
	for(; b; b>>=1) {
		if(b&1)res=res*a%p;
		a=a*a%p;
	}
	return res;
}
ll C(ll n, ll m) {
	if(m>n||m<0)return 0;
	return (fac[n]*inv[n-m]%p)*inv[m]%p;
}
ll init(ll N) {
	fac[0]=1;
	for(int i=1; i<=N; i++)fac[i]=fac[i-1]*i%p;
	inv[N]=pow(fac[N],p-2);
	for(int i=N-1; i>=0; i--)inv[i]=inv[i+1]*(i+1)%p;
}
int main() {
	scanf("%d%d",&n,&m);
	init(maxn);
	printf("%lld\n",C(n,m));
	return 0;
}
2022/4/3 14:23
加载中...