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;
}
    
}
posted @ 2025-02-28 11:35  土木牢盖  阅读(24)  评论(0)    收藏  举报