如题,不知道哪里写寄了,求各位巨佬帮帮忙/kel
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6;
int fac[N + 10], ifac[N + 10];
int qpow(int n, int m, int Mod) {
int res = 1;
while(m) {
if(m & 1) res = res * n % Mod;
n = n * n % Mod, m >>= 1;
}
return res;
}
void prep(int n, int m, int Mod) {
fac[0] = 1;
for(int p = 1; p <= n + m; p++)
fac[p] = fac[p - 1] * p % Mod;
ifac[Mod] = qpow(fac[Mod], Mod - 2, Mod);
// for(int p = Mod - 1; p >= 1; p--)
// ifac[p] = ifac[p + 1] * (p + 1);
for(int p = 0; p <= n + m; p++)
ifac[p] = qpow(fac[p], Mod - 2, Mod);
}
int lc(int n, int m, int p) {
return fac[n] * ifac[m] % p * ifac[n - m] % p;
}
int C(int n, int m, int p) {
if(!m) return 1;
else return C(n / p, m / p, p) * lc(n % p, m % p, p) % p;
}
signed main() {
int T;
cin >> T;
while(T--) {
int n, m, p;
cin >> n >> m >> p;
prep(n, m, p);
n = n + m;
cout << C(n, m, p) << endl;
}
}