P3807 【模板】卢卡斯定理/Lucas 定理
纯手写(迫真)//我在写什么?

{
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define NO cout << "NO" << endl;
#define YES cout << "YES" << endl;
ll gcd(ll p, ll q) {return (p % q == 0)? q : gcd(q, p % q);}
ll lcm(ll p, ll q) {return p * q / gcd(p, q);}
ll qpow(ll a, ll b, ll p) {//快速幂计算a^b mod p
ll res = 1;
while (b) {
if (b & 1) res = res * a % p;
a = a * a % p;
b >>= 1;
}
return res;
}
ll C(ll n, ll m, ll p) {//C(n, m) mod p
if (m > n) return 0;
ll up = 1, down = 1;
for (ll i = 1; i <= m; i++) {
up = up * (n - m + i) % p;//分子n*(n-1)*...*(n-m+1)
down = down * i % p;//分母m! I AM M
}
return up * qpow(down, p - 2, p) % p;//分子*分母的逆元 mod p
}
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;
}
void solve() {
ll n, m, p;cin >> n >> m >> p;
cout << lucas(n + m, n, p) << endl;
}
int main() {
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int t;cin >> t;
while (t--) {
solve();
}
return 0;
}
}

浙公网安备 33010602011771号