社区讨论

菜鸡玄关求调 Lucas 板子 P3807

灌水区参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lw9dh47i
此快照首次捕获于
2024/05/16 22:55
2 年前
此快照最后确认于
2024/05/17 08:51
2 年前
查看原帖
rt,WA 0 pts
CPP
#include<bits/stdc++.h>
using namespace std;
long long T;
long long n,m,p,inv[200005],fac[200005];
inline long long ksm(long long a,long long b){
	if(b==0){
		return 1;
	}
    long long tmp=ksm(a,b/2);
	if(b%2==0){
		return tmp*tmp%p;
	}
	else{
		return tmp*tmp%p*a%p;
	}
}
inline void getfac(){
	fac[1]=1;
	for(int i=2;i<=200000;i++){
		fac[i]=fac[i-1]*i%p;
	}
	return;
}
inline void getinv(){
	inv[0]=1;
	for(int i=1;i<=200000;i++){
		inv[i]=inv[i-1]*ksm(i,p-2)%p;
	}
	return;
}
inline long long getC(long long n,long long m){
	if(m>n){
		return 0;
	}
	return fac[n]*inv[m]%p*inv[n-m]%p;
}
inline long long Lucas(long long n,long long m){
	if(m>n){
		return 0;
	}
	if(n<p){
		return getC(n,m);
	}
	long long p1=n/p,p2=m/p;
	long long k1=n%p,k2=n%p;
	return Lucas(p1,p2)*Lucas(k1,k2)%p;
}
int main(){
	cin>>T;
	while(T--){
        cin>>n>>m>>p;
        getfac();
	    getinv();
		cout<<Lucas(n+m,m)<<endl;
	}
}
/*
1
23281 16827 2521 这是一组错误的数据 


2484 这是我的输出 

1999 这是正确的输出 
*/

楼主发完帖子就去睡了/shui 所以大概明天早上才能回 qwq

回复

3 条回复,欢迎继续交流。

正在加载回复...