组合数学
O(N^2) 求组合数 $C^m_n$
根据$C_n^m = C_{n-1}^m + C_{n-1}^{m-1}$
初始化$C_i^0 = 1$,然后开始递推即可
1 | for (int i = 0; i < N; i ++ ) |
$O(N)$求组合数
根据$C_n^m = \frac{n!}{m! \times (n - m)!}$
O(n)预处理出阶乘以及阶乘的逆元,每次求 $C_n^m$ 均为O(1)
1 | fact[0] = infact[0] = 1; |
卢卡斯定理求组合数
卢卡斯定理:若p是质数,则对于任意整数 $1 \leq m \leq n$,有:
$C_n^m = C_{n \bmod p}^{m \bmod p} \times C_{n / p}^{m / p} \pmod p $
当题目中发现,模数是质数,并且 $p \leq n$ 时,可使用卢卡斯定理。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DarknessCatcher!