重修 Lucas & exLucas
Lucas
内容
\[\binom{ap+b}{cp+d}\equiv\binom{a}{c}\binom{b}{d}\pmod{p}
\]
其中 \(p\) 为素数,\(0\le b,d<p\)。
也就是说将两个数分别 \(p\) 进制分解,对应位形成的组合数相乘。
推论(重要)
当 \(p=2\) 时有
\[\binom{n}{m}\equiv[m\subseteq n]\pmod{2}
\]
其中 \(\subseteq\) 表示二进制(相当于状压)的包含。
证明
以下等号均指 \(\bmod p\) 意义下相等。
\[\begin{aligned}
\binom{ap+b}{cp+d}&=[x^{cp+d}](x+1)^{ap+b}
\\&=[x^{cp+d}]((x+1)^p)^a(x+1)^b
\\&=[x^{cp+d}](x^p+1)^a(x+1)^b
\\&=([x^{cp}](x^p+1)^a)([x^d](x+1)^b)
\\&=([x^c](x+1)^a)([x^d](x+1)^b)
\\&=\binom{a}{c}\binom{b}{d}
\end{aligned}
\]
其中
\[(x+1)^p\equiv x^p+1\pmod p
\]
可用二项式定理证明。
exLucas
将模数 \(M\) 素因数分解,设当前枚举到因子 \(p^e\),则求出 \(\binom{n}{m}\bmod p^e\) 后 CRT 即可。
\[\binom{n}{m}\equiv\frac{n!}{m!(n-m)!}\equiv \frac{\frac{n!}{p^x}}{\frac{m!}{p^y}\frac{(n-m)!}{p^z}}p^{x-y-z}\pmod{p^e}
\]
其中 \(x,y,z\) 分别为三个阶乘中 \(p\) 因子的个数,由于组合数为整数,\(x-y-z\ge 0\)。
此时分母中两部分都是与 \(p^e\) 互质的整数了,存在逆元(exgcd)。所以我们只需要求出 \(F(n)=\frac{n!}{p^x}\bmod p^e\) (\(x\) 为 \(n!\) 中 \(p\) 因子个数)即可。
通过拆分 \(n!\) 连乘中 \(p\) 的倍数,非 \(p\) 倍数的循环节和余项,得:
\[n!=
p^{\lfloor n/p\rfloor}
(\lfloor\frac{n}{p}\rfloor)!
\left(\prod_{i=1,p\not\mid i}^{p^e}i\right)^{\lfloor n/p^e\rfloor}
\prod_{i=1,p\not\mid i}^{n\bmod p^e}i
\]
所以
\[F(n)=F(\lfloor\frac{n}{p}\rfloor)
\left(\prod_{i=1,p\not\mid i}^{p^e}i\right)^{\lfloor n/p^e\rfloor}
\prod_{i=1,p\not\mid i}^{n\bmod p^e}i
\]
边界条件 \(F(0)=1\)。
本文来自博客园,作者:ShaoJia,版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。