之前在很多地方看到过不同的组合数取模板子
今天在做一道题的时候看到这个我没见过的、看不懂的板子,有没有大佬能讲解一下原理
LL exp_mod(LL a, LL b, LL p) {
LL res = 1;
while (b != 0) {
if (b & 1)
res = (res * a) % p;
a = (a * a) % p;
b >>= 1;
}
return res;
}
LL Comb(LL a, LL b, LL p) {
if (a < b)
return 0;
if (a == b)
return 1;
if (b > a - b)
b = a - b;
LL ans = 1, ca = 1, cb = 1;
for (LL i = 0; i < b; ++i) {
ca = (ca * (a - i)) % p;
cb = (cb * (b - i)) % p;
}
ans = (ca * exp_mod(cb, p - 2, p)) % p;
return ans;
}