Lucas 大组合求模
#include<bits/stdc++.h>
using namespace std;
long long fac(long long n,long long p){
long long sum=1;
for(long long i=1;i<=n;i++)
sum=sum*i%p;
return sum;
}
long long qpow(long long n,long long m,long long p){
long long sum=1;
while(m){
if(m&1)sum=(sum*n)%p;
n=(n*n)%p;
m>>=1;
}
return sum;
}
long long c(long long n,long long m,long long p){
long long t1=1,t2=1,t3=1;
if(m>n)return 0;
t1=fac(n,p);
t2=fac(m,p);
t3=fac(n-m,p);
return t1*qpow(t2,p-2,p)%p*qpow(t3,p-2,p)%p;
}
long long lucas(long long n,long long m,long long p){
if(m==0)return 1;
return (c(n%p,m%p,p)*lucas(n/p,m/p,p))%p;
}
int main(){
long long t,n,m,p;
scanf("%lld",&t);
while(t--){
scanf("%lld%lld%lld",&n,&m,&p);
printf("%lld\n",lucas(n+m,m,p));
}
return 0;
}