1、当 \(n,m\le1000\),\(p\) 为任意数时
可以使用暴力(\(\text{O}(n^2)\))求解 杨辉三角 的方式,计算
\[\binom{n}{m} = \binom{n-1}{m-1}\sdot\binom{n-1}{m} \]2、当 \(n,m\le 10^6\),\(p\approx 10^9\) 且 \(p\) 为素数时
利用公式
\[\binom{n}{m} =\dfrac{n!}{m!(n-m)!}\bmod p \]\(\text O(n)\) 预处理阶乘,然后求逆元。
3、当 \(n\le 10^6\),\(m\le 1000\),\(p\) 为任意数时
\[\binom{n}{m} =\dfrac{n!}{m!(n-m)!}=\dfrac{n\times(n-1)\times\dots(n-m+1)}{1\times 2\times 3\times \dots\times m} \]然后可以尝试约分,得到
\[\binom{n}{m} = x_1\times x_2\times x_3\times\dots\times x_m \]4、当 \(n,m\le 10^9\),\(p\le 1000\) 且 \(p\) 为素数时
因为 \(p\) 的范围较小,且 \(p\) 为素数,考虑 Lucas定理 求解,
\[\binom{n}{m}\bmod p= \binom{\left\lfloor n/p\right\rfloor}{\left\lfloor m/p\right\rfloor}\cdot\binom{n\bmod p}{m\bmod p}\bmod p \] 标签:取模,各种,组合,10,dfrac,bmod,times,le,binom From: https://www.cnblogs.com/Cnghit/p/17048526.html