菜鸡玄关求调 Lucas 板子 P3807
  • 板块灌水区
  • 楼主Bicycle_zxc
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/5/16 22:53
  • 上次更新2024/5/17 08:51:54
查看原帖
菜鸡玄关求调 Lucas 板子 P3807
710345
Bicycle_zxc楼主2024/5/16 22:53

rt,WA 0 pts

#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
2024/5/16 22:53
加载中...