P3807 【模板】卢卡斯定理
求 \(C_{m + n}^{m} \% p\) ( \(1\le n,m,p\le 10^5\) )
错误日志: 数组开小(洼地hi阿偶我姑父阿贺佛奥UFO爱我帮你)
Pre
好的我们继续恶补数学
首先复习一下 \(O(N)\) 求质数逆元的方法\[inv[1] = 1\]\[inv[i] = (p - p / i) * inv[p \% i] \% p (i >= 2)\]
LL inv[maxn];
void get_inv(LL n){
inv[1] = 1;
for(LL i = 2;i <= n;i++)inv[i] = (p - p / i) * inv[p % i] % p;
}
然后是 \(O(m)\) 求 \(C_{n}^{m} \% p\):\[C_{n}^{m}\% p = \frac{n!}{m!(n - m)!}\% p\]\[=\frac{(n - m + 1) * (n - m +2) * ... * n}{m!}\% p\]\[=(\frac{n - m + 1}{1}\% p) * (\frac{n - m + 2}{2}\% p) * ... * (\frac{n}{m}\% p)\]
其中除法取模可以用上面的逆元计算, 求解一个组合数的复杂度为 \(O(m)\)
原文地址:https://www.cnblogs.com/Tony-Double-Sky/p/9532173.html
时间: 2024-10-26 08:44:05