P3807 【模板】卢卡斯定理/Lucas 定理:80分。
第1个点WA了,代码:
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N = 100005;
int fac[N];
ll qpow(ll a, ll n, ll mod){
ll ans = 1;
a %= mod;
while(n){
if(n & 1) ans = (ans * a) % mod;
a = (a * a) % mod;
n >>= 1;
}
return ans;
}
ll inverse(ll a, int mod){
return qpow(fac[a], mod - 2, mod);
}
ll C(ll n, ll r, int mod){
if(r > n) return 0;
return ((fac[n] * inverse(r, mod)) % mod * inverse(n - r, mod) % mod);
}
ll lucas(ll n, ll r, int mod){
if(r == 0) return 1;
return C(n % mod, r % mod, mod) * lucas(n / mod, r / mod, mod) % mod;
}
int main(){
int T;
cin >> T;
while(T --){
int a, b, m;
cin >> a >> b >> m;
fac[0] = 1;
for(int i=1; i<=m; i++) fac[i] = (fac[i - 1] * i) % m;
cout << lucas(a + b, a, m) << "\n";
}
}