求助0pts,wa on 1,后面全部re
查看原帖
求助0pts,wa on 1,后面全部re
817442
Sakuya_maid楼主2023/11/15 08:07
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

constexpr int N = 1e5 + 5;

#define int long long

int p, n, m;

int inv[N], fac[N];

int ksm(int a, int b, int p)
{
    int res = 1;

    while(b)
    {
        if(b & 1)res = res * a % p;
        a = a * a % p;
        b >>= 1;
    }

    return res;
}

int getC(int n, int m, int p)
{
    return fac[n] * inv[m] % p * inv[n - m] % p;
}

int lucas(int n, int m, int p)
{
    if(m == 0)return 1;
    return lucas(n / p, m / p, p) * getC(n % p, m % p, p) % p;
}

void build(int p)
{
    inv[0] = fac[0] = 1;

    for(int i = 1; i <= p; ++ i)
    {
        fac[i] = fac[i - 1] * i % p;
        inv[i] = inv[i - 1] * ksm(i, p - 2, p) % p;
    }
}

void Sakuya()
{
    cin >> n >> m >> p;

    build(p);

    cout << lucas(n + m, n, p) % p << '\n';
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    for (cin >> T; T -- ; )
        Sakuya();

}
2023/11/15 08:07
加载中...