直接用定理的公式计算
代码:
#include<iostream>
using namespace std;
#define fle(i,a,b) for(int i = a;i<=(b);i++)
#define ll long long
ll C(ll n,ll m,ll p){
if(m > n){return 0;}
ll ans = 1;
fle(i,1,n){
ans = ans * i;
}
fle(i,1,m){
ans /= i;
}
fle(i,1,n-m){
ans /= i;
}
return ans;
}
ll lucas(ll n,ll m,ll p){
if(m == 0){return 1;}
return (C(n%p,m%p,p) * lucas(n/p,m/p,p)) % p;
}
int main()
{
ll t;
cin >> t;
while(t--){
ll n,m,p;
cin >> n >> m >> p;
cout << lucas(n+m,m,p) << endl;
}
return 0;
}