summaryrefslogtreecommitdiff
path: root/content/math/binomial0.cpp
blob: 5f2ccaa7f6855241389d6dee85b9ccf0ee57f26c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
constexpr ll lim = 10'000'000;
ll fac[lim], inv[lim];

void precalc() {
	fac[0] = inv[0] = 1;
	for (int i = 1; i < lim; i++) fac[i] = fac[i-1] * i % mod;
	inv[lim - 1] = multInv(fac[lim - 1], mod);
	for (int i = lim - 1; i > 0; i--) inv[i-1] = inv[i] * i % mod;
}

ll calc_binom(ll n, ll k) {
	if (n < 0 || n < k || k < 0) return 0;
	return (inv[k] * inv[n-k] % mod) * fac[n] % mod;
}