题目:卢卡斯定理
为什么MLE了???还卡死掉,没输出,但没有显示RE,时间也很快。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5;
int n,m,p,a[maxn+1],b[maxn+1],t;
int C(int x,int y,int mod){
if(y>x)return 0;
return (long long)a[x]*b[x-y]%mod*b[y]%mod;
}
int lucas(int x,int y,int mod){
if(!m)return 1;
return (long long)C(x%mod,y%mod,mod)*lucas(x/mod,y/mod,mod)%mod;
}
inline int read(){
int s=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=(s<<3)+(s<<1)+(ch^48);
ch=getchar();
}
return s*w;
}
void work(){
n=read();m=read();p=read();
a[0]=b[0]=a[1]=b[1]=1;
n+=m;
for(int i=2;i<=p;i++){
b[i]=-(long long)(p/i)*b[p%i]%p;
}
for(int i=2;i<=p;i++){
a[i]=(long long)a[i-1]*i%p;
b[i]=(long long)b[i-1]*b[i]%p;
}
printf("%d\n",(lucas(n,m,p)+p)%p);
}
signed main(){
t=read();
while(t--){
work();
}
return 0;
}
有没有人帮帮忙,谢谢。