【笔记】基础组合数学 + 二项式系数恒等式
const int P = 1e9 + 7;
LL mod(LL x) { return (x % P + P) % P; }
void red(LL& x) { x = mod(x); }
LL qpow(LL a, LL b, int p = P) {
LL r = 1;
for (a %= p; b; b >>= 1, a = a * a % p)
if (b & 1) r = r * a % p;
return r;
}
template <int N, int P>
struct C_prime {
LL fac[N + 10], ifac[N + 10];
C_prime() {
for (int i = fac[0] = ifac[0] = 1; i <= N; i++) fac[i] = fac[i - 1] * i % P;
ifac[N] = qpow(fac[N], P - 2, P);
for (int i = N - 1; i >= 1; i--) ifac[i] = ifac[i + 1] * (i + 1) % P;
}
LL operator()(int n, int m) {
return n >= m ? fac[n] * ifac[n - m] % P * ifac[m] % P : 0;
}
};
red = reduce
加了一点点小变形,可能有些限制在抄书的时候抄漏了,但是对于非负整数所有结论都是没有错的。
名称 | 公式 | 限制 |
---|---|---|
阶乘展开式 | \(\displaystyle\binom n k=\frac{n!}{k!(n-k)!}\) | 整数 \(n\geq k\geq 0\) |
对称恒等式 | \(\displaystyle\binom n k=\binom n {n-k}\) | 整数 \(n\geq 0\),\(k\) 为整数 |
吸收/提取恒等式 | \(\displaystyle\binom n k=\frac{n}{k}\binom{n-1}{k-1}=\frac{k+1}{n+1}\binom{n+1}{k+1}\) | 整数 \(k\neq 0\) |
加法/归纳恒等式 | \(\displaystyle\binom n k=\binom{n-1}{k}+\binom{n-1}{k-1}\) | \(k\) 为整数 |
上指标反转 | \(\displaystyle\binom {-n} k=(-1)^k\binom{n+k-1}{k}\) | \(k\) 为整数(正负上指标的转换) |
三项式版恒等式 | \(\displaystyle\binom n m\binom m k=\binom n k\binom{n-k}{m-k}=\binom{n}{n-m, m-k, k}\) | \(m,k\) 为整数 |
二项式定理 | \(\displaystyle\sum_k\binom n k x^k y^{n-k}=(x+y)^n\) | 整数 \(n\geq 0\) 或 \(\text{abs}(x/y)<1\) |
平行求和法 | \(\displaystyle\sum_{k\leq m}\binom{k+n}{k}=\binom{n+m+1}{m}\) | \(n\) 为整数 |
上指标求和 | \(\displaystyle\sum_{0\leq k\leq n}\binom k m=\binom{n+1}{m+1}\) | 整数 \(n,m\geq 0\) |
范德蒙德卷积 | \(\displaystyle\sum_k \binom r k\binom{s}{n-k}=\binom{r+s}{n}\) | \(n\) 为整数 |
补充:三项式系数 | \(\displaystyle\binom{n+m+k}{n,m,k}=\frac{(n+m+k)!}{n!\ m!\ k!}\) | \(n, m, k\) 为整数 |
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/template-qpow.html