0分求助
查看原帖
0分求助
1017759
zjzhangzhiyi楼主2024/7/22 11:03
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+9;
int n,m,p;
int f[maxn],g[maxn];
ll qpow(long long bas,long long ind){
	long long res=1;
	while(ind){
		if(ind%2!=0) res*=bas%p;
		ind/=2;
		bas*=bas%p;
	}
	return res;
}
ll getC(int a,int b){
	if(b>a) return 0; 
	return f[a]%p*g[b]%p*g[a-b]%p;
}
ll lucas(int a,int b){
	if(b==0) return 1;
	return lucas(a/p,b/p)%p*getC(a%p,b%p)%p; 
}
void init(int P){
	f[0]=1;
	g[0]=1;
	for(int i=1;i<=P;i++){
		f[i]=f[i-1]*i%P;
		g[i]=g[i-1]*qpow(i,p-2)%P;
	}
	return ;
}
int main(){
	int T;
	cin>>T;
	while(T--){
		cin>>n>>m>>p;
	    init(p);
		cout<<lucas(n,m)<<endl;
	}
	return 0;
}
2024/7/22 11:03
加载中...