附上WA代码
#include<bits/stdc++.h>
using namespace std;
int T;
long long n,m,p;
long long ksm(long long x,long long y)
{
if(y==1) return x;
long long rst=ksm(x,y/2)%p;
if(y%2==0)
{
return (rst*rst)%p;
}else
{
return ((rst*rst)%p)*x;
}
}
int main()
{
cin>>T;
while(T--)
{
scanf("%lld%lld%lld",&n,&m,&p);
long long ans=1;
long long l=n+m;
for(long long i=n+1;i<=l;i++)
{
ans=(ans*i)%p;
}
for(long long i=1;i<=m;i++)
{
ans=(ans*ksm(i,p-2))%p;
}
printf("%lld\n",ans);
}
return 0;
}
有些数据会算出0的结果
改用lucas之后就A了