help~~~~
查看原帖
help~~~~
367953
_Inzaghi_楼主2022/1/8 22:32

RT

#include<iostream>
using namespace std;

#define N 100005
typedef long long LL;
long long fact[N],infact[N];
long long n,m,p;

long long C(LL n,LL m,LL p){
	if(m > n) return 0;
	return (LL)fact[n] * infact[n - m] % p * infact[m] % p;
}

LL KSM(LL x,LL n,LL mod){//求逆元 
	LL sum = 1;
	while(n){
		if(n & 1)sum = sum * x % mod;
		x = x * x % mod;
		n >>= 1;
	}
	return sum % mod;
}


LL Lucas(long long n,long long m,long long p){//递归版LUCAS
	if(n < m) return 0;
	if(n < p) return fact[n] * infact[n - m] % p * infact[m] % p;
	return C(n % p,m % p,p) * Lucas(n / p,m / p,p) % p; 
}

int main(){
	int T;
	for(scanf("%d",&T);T;T--){
		scanf("%lld%lld%lld",&n,&m,&p);
		fact[0] = fact[0] = 1;
		infact[1] = fact[1] = 1;//初始化
		for(int i = 2;i <= p;i++){
			fact[i] = fact[i - 1] % p;
			infact[i] = infact[i - 1] * KSM(i,p - 2,p) % p;
		}
		printf("%lld\n",Lucas(n + m,n,p)%p); 
	}
	return 0;
} 
2022/1/8 22:32
加载中...