summaryrefslogtreecommitdiff
path: root/math/binomial0.cpp
blob: d9af9179dfaf6871cdb27735682aabc222bf31ed (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 (fac[n] * fac[n-k] % mod) * fac[k] % mod;
}