为什么这段代码
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const int N = 1e6 + 5;
ll n, m, fact[N] = {1}, infact[N] = {1}, x, y;
void exgcd(ll a, ll b, ll x, ll y){
if(!b) {
x = 1, y = 0;
return ;
}
exgcd(b, a % b, y, x);
y -= (a / b) * x;
return ;
}
ll C(int n, int m, int p) {
if (n < m) return 0;
return (ll)fact[n] * infact[m] % p * infact[n - m] % p;
}
ll lucas(int n, int m, int p) {
if (n < p) return C(n, m, p);
return (ll ) C(n % p, m % p, p) * lucas(n / p, m / p, p) % p;
}
int main() {
int q;
cin >>q;
for (int i=1; i<= q; i++) {
int n, m, p;
scanf("%d%d%d", &n, &m, &p);
for (int i=1; i<p; i++) {
fact[i] = fact[i - 1] * i % p;
exgcd(i, p, x, y);
x = (x % p + p - 1) % p + 1;
infact[i] = infact[i - 1] * x % p;
}
printf("%lld\n", lucas(n + m, m, p));
}
return 0;
}
玄学无法编译?