前言
最近在写数学题,补一些定理证明。
本文参考了 OI-wiki 和 iorit 的博客,如有错误或不足,敬请指出。
前置知识
二项式定理
二项式定理:\((a+b)^n=\sum\limits_{i=0}^n\dbinom{n}{i}a^ib^{n-i}\)
证明:从组合意义考虑每一项的系数易证。
Lucas 定理
内容
Lucas 定理:对于质数 \(p\),有
\[\dbinom{n}{m}\equiv \dbinom{\left\lfloor\dfrac{n}{p}\right\rfloor}{\left\lfloor\dfrac{m}{p}\right\rfloor}\dbinom{n\bmod p}{m\bmod p}\pmod p
\]
证明
Lemma:\(\dbinom{p}{i}\bmod p=\left[i=0\lor i=p\right]\)
证明:\(\dbinom{p}{i}=\dfrac{p!}{i!(p-i)!}\),显然 \(p\) 无法被比它小的数约分,仅当 \(i=p\) 和 \(i=0\) 时,\(\dbinom{p}{i}=1\),\(i\) 取其它取值时都 \(\dbinom{p}{i}\) 含有 \(p\) 这个因子,即 \(\dbinom{p}{i}\bmod p=0\)。
Lemma:\((a+b)^p\equiv a^p+b^p\pmod p\)
证明:由二项式定理及上述引理得
\[\begin{aligned}(a+b)^p&=\sum\limits_{i=0}^n\dbinom{p}{i}a^ib^{p-i}\\&\equiv\sum\limits_{i=0}^n\left[i=0\lor i=p\right]a^ib^{p-i}\pmod p\\&\equiv a^p+b^p\pmod p\end{aligned}
\]
可以看出,当 \(a,b\) 为多项式时,该引理仍然适用。
由二项式定理得 \(\dbinom{n}{m}\) 即为 \((x+1)^n\) 的 \(m\) 次系数。
由上述引理得
\[\begin{aligned}(x+1)^n&=(x+1)^{p{\left\lfloor\frac{n}{p}\right\rfloor}}(x+1)^{n\bmod p}\\&\equiv(x^p+1)^{\left\lfloor\frac{n}{p}\right\rfloor}(x+1)^{n\bmod p}\pmod p\end{aligned}
\]
看 \(m\) 次项
\[\dbinom{n}{m}x^m\equiv\dbinom{{\left\lfloor\dfrac{n}{p}\right\rfloor}}{\left\lfloor\dfrac{m}{p}\right\rfloor}x^{p{\left\lfloor\frac{m}{p}\right\rfloor}}\cdot\dbinom{n\bmod p}{m\bmod p}x^{m\bmod p}\pmod p
\]
\[\therefore\dbinom{n}{m}x^m\equiv\dbinom{{\left\lfloor\dfrac{n}{p}\right\rfloor}}{\left\lfloor\dfrac{m}{p}\right\rfloor}\dbinom{n\bmod p}{m\bmod p}x^m\pmod p
\]
\[\therefore\dbinom{n}{m}\equiv\dbinom{{\left\lfloor\dfrac{n}{p}\right\rfloor}}{\left\lfloor\dfrac{m}{p}\right\rfloor}\dbinom{n\bmod p}{m\bmod p}\pmod p
\]
可以 \(O(p+\log n)\) 求出。
扩展 Lucas 定理
过程
还是求 \(\dbinom{n}{m}\bmod p\),但 \(p\) 不一定为质数,设 \(p=\prod\limits_{i=1}^wp_i^{\alpha_i},p_i\in\mathbf{Prime}\)。
于是可以求出所有 \(\dbinom{n}{m}\bmod p_i^{\alpha_i}\),再 CRT 合并即可。
考虑如何求 \(\dbinom{n}{m}\bmod p^k\),其中 \(p\in\mathbf{Prime}\)。
\(\dbinom{n}{m}\bmod p^k=\dfrac{n!}{m!(n-m)!}\bmod p^k\),当 \(\max(n,m)\ge p\) 时,不存在逆元,考虑把分子分母的 \(p\) 约掉,令 \(f(x)=\max\{k|\dfrac{x!}{p^k}\in\mathbb{N}\}\),即 \(x!\) 包含多少个因子 \(p\),设 \(n=a\cdot p^{f(n)},m=b\cdot p^{f(m)},n-m=c\cdot p^{f(n-m)}\),则 \(\dbinom{n}{m}=\dfrac{a}{bc}\cdot p^{f(n)-f(m)-f(n-m)}\)。
容易证明,\(f(x)=\begin{cases}0&x<p\\ \left\lfloor\dfrac{x}{p}\right\rfloor +f(\left\lfloor\dfrac{x}{p}\right\rfloor)&x\ge p\end{cases}\)
可以看出,\(f(x)\) 可以在 \(O(\log x)\) 的时间内求出。
于是求 \(\dfrac{a}{bc}\) 即可,考虑如何处理阶乘。
举个例子,求 \(\dfrac{22!}{3^{f(22)}}\bmod 3^2\)
\[\begin{aligned}22!&=1\times2\times{\color{Blue}3}\times4\times5\times{\color{Blue}6}\times7\times8\times{\color{Blue}9}\times10\times11\times{\color{Blue}12}\times13\times14\times{\color{Blue}15}\times16\times17\times{\color{Blue}18}\times19\times20\times{\color{Blue}21}\times22\\&=1\times2\times4\times5\times7\times8\times10\times11\times13\times14\times16\times17\times19\times20\times22\times3\times6\times9\times12\times15\times18\times21\\&=1\times2\times4\times5\times7\times8\times10\times11\times13\times14\times16\times17\times19\times20\times22\times 7!\times 3^7\end{aligned}
\]
发现 \(1\sim8\) 和 \(10\sim 17\) 在模 \(3^2\) 意义下下是一样的,合并起来。
\[\begin{aligned}22!&\equiv(1\times2\times4\times5\times7\times8)^2\times19\times20\times22\times 7!\times 3^7\pmod {3^2}\end{aligned}
\]
后面几个零散的数可以直接取模,即
\[\begin{aligned}22!&\equiv(1\times2\times4\times5\times7\times8)^2\times1\times2\times4\times 7!\times 3^7\pmod {3^2}\end{aligned}
\]
阶乘前的两部分都是 \(O(p^k)\) 级别的,前半部分的循环节乘起来后快速幂,后半部分的零散块暴力乘,然后递归处理就好。
若不计 CRT 的复杂度,这个算法是 \(O(p\log n)\) 的,实际上还可以优化,发现循环节和零散块都可 \(O(p)\) 轻松预处理,复杂度可优化到单次到 \(O(\log n)\)。