#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
#define int long long
int jie[N];
int fa[N];
int p;
int fast_pow(int a,int b)
{
int ans = 1;
while(b)
{
if(b&1)
{
ans = ans*a%p;
}
a = a*a%p;
b>>=1;
}
return ans%p;
}
int C(int n,int m)
{
if(n<m||n<0||m<0)
{
return 0;
}
return jie[n]*fa[m]%p*fa[n-m]%p;
}
int lucas(int n,int m)
{
if(!m)
{
return 1;
}
return C(n%p,m%p)*lucas(n/p,m/p)%p;
}
signed main()
{
int t;
scanf("%lld",&t);
while(t--)
{
int n,m;
scanf("%lld %lld %lld",&n,&m,&p);
memset(fa,0,sizeof(fa));
memset(jie,0,sizeof(jie));
jie[0] = 1;
for(int i = 1;i<=n+m;i++)
{
jie[i] = jie[i-1]*i%p;
}
fa[n+m] = fast_pow(jie[n+m],p-2);
for(int i = n+m-1;i>=0;i--)
{
fa[i] = fa[i+1]*(i+1)%p;
}
printf("%lld\n",lucas(n+m,n));
}
return 0;
}
前天刚学了卢卡斯定理,结果连交好几次都是 0 分。有哪位大佬帮忙调一下?