这叫绿?约分+欧拉筛=AC
#include<bits/stdc++.h>
using namespace std;
int t,a[100005],n,r,o,mod,prime[100005];
long long ans=1;
bool vis[100005];
void f(){
for(int i=2;i<=1e5;i++){
if(!vis[i]) prime[o++]=i;
for(int j=0;j<o&&i*prime[j]<=1e5;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
void d(int nn,int t){
for(int m=0;prime[m]<=nn;m++) while(nn%prime[m]==0&&nn!=1) nn/=prime[m],a[prime[m]]+=t;
}
int main(){
scanf("%d",&t);f();
while(t--){
scanf("%d%d%d",&r,&n,&mod);
memset(a,0,sizeof(a));n+=r,ans=1;
for(int i=n-r+1;i<=n;i++) d(i,1);
for(int j=r;j>1;j--) d(j,-1);
for(int i=0;i<o;i++) while(a[prime[i]]--) ans=ans*prime[i]%mod;
printf("%d\n",ans);
}
return 0;
}