Lucas 定理学习笔记

前言

最近在写数学题,补一些定理证明。

本文参考了 OI-wikiiorit 的博客,如有错误或不足,敬请指出。

前置知识

二项式定理

二项式定理:\((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)\)

posted @ 2024-02-26 15:29  Terac  阅读(127)  评论(0)    收藏  举报