求助
  • 板块灌水区
  • 楼主Deuteron
  • 当前回复15
  • 已保存回复15
  • 发布时间2021/7/28 10:29
  • 上次更新2023/11/4 13:04:55
查看原帖
求助
397982
Deuteron楼主2021/7/28 10:29

为什么这段代码

#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;
}

玄学无法编译?

2021/7/28 10:29
加载中...