求助
  • 板块灌水区
  • 楼主IOIer
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/16 20:56
  • 上次更新2023/11/3 09:27:27
查看原帖
求助
1035106
IOIer楼主2023/7/16 20:56

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";
	}
}
2023/7/16 20:56
加载中...