题目:卢卡斯定理
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int Max=100005;
int t,n,m,mod;
int mul[Max],inv[Max];
inline void pre()
{
mul[0]=inv[1]=1;
for(int i=1;i<=mod;i++) mul[i]=(mul[i-1]*i)%mod;
for(int i=2;i<=mod;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
}
inline int C(int n,int m)
{
if(n>=0&&m>=0&&n>=m) return (mul[n]*inv[mul[m]]%mod*inv[mul[n-m]])%mod;
return 0;
}
inline int Lucas(int n,int m)
{
if(!m) return 1;
return (Lucas(n/mod,m/mod)*C(n%mod,m%mod))%mod;
}
signed main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&mod);
if(n+m<m) {cout<<"0\n";continue;}
pre();
printf("%d\n",Lucas(n+m,m));
}
return 0;
}