题意
求Cn+mm mod pC_{n+m}^{m}\ mod\ pCn+mm mod p,其中ppp是质数。
思路
LucasLucasLucas定理:
Cnm mod p=Cn%pm%p∗Cn/pm/p mod pC_{n}^{m}\ mod\ p=C_{n\%p}^{m\%p}*C_{n/p}^{m/p}\ mod\ pCnm mod p=Cn%pm%p∗Cn/pm/p mod p
套公式即可。
代码
#include<cstdio>
#include<algorithm>
int n, m, p;
long long fac[100001];
int power(int a, int b) {
long long res = 1;
for (; b; b >>= 1) {
if (b & 1) res = res * a % p;
a = (long long)a * a % p;
}
return res;
}
long long C(int n, int m) {
if (n < m) return 0;
return fac[n] * power(fac[m], p - 2) % p * power(fac[n - m], p - 2) % p;
}
long long lucas(int n, int m) {
if (!m) return 1;
return C(n % p, m % p) * lucas(n / p, m / p) % p;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
scanf("%d %d %d", &n, &m, &p);
fac[0] = 1;
for (int i = 1; i <= p; i++)
fac[i] = fac[i - 1] * i % p;
printf("%lld\n", lucas(n + m, m));
}
}