社区讨论
菜鸡玄关求调 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 条回复,欢迎继续交流。
正在加载回复...