wilson 定理的运用

定义 1 定义 \(v_p(n)\) 是正整数 \(n\) 中含有质因数 \(p\) 的个数。

一、求解 \(\frac{n!}{p^{v_p(n!)}}\bmod p\)

\(p\) 是素数,将 \([1,n]\) 所有 \(p\) 的倍数的项除掉一些 \(p\) 使得该项不再是 \(p\) 的倍数,然后再乘起来模 \(p\)

然后我们假设 \(\operatorname{F}(n,p)=\frac{n!}{p^{v_p(n!)}}\bmod p\)\(\operatorname{H}(s,p)=\frac{s}{s^{v_p(s)}}\)

比如说我们要求 \(\begin{align}\operatorname{F}(10,3)&\equiv 1\times 2\times\frac{3}{3}\times 4\times 5\times\frac{6}{3}\times 7\times 8\times\frac{9}{3^2}\times 10\pmod 3\end{align}\)

好像就是 \(n!\times (p^{v_p(n!)})^{-1}\bmod p\)。但是这样我们要预处理出 \(1!\to n!\),时间复杂度 \(O(n)\),超时。
考虑用另一种方法计算。我们注意到 \(n!=1\times 2\times …\times (p-1)\times p\times (p+1)\times …\times (2p-1)\times 2p\times (2p+1)\times…\times (\lfloor\frac{n}{p}\rfloor\times p-1)\times(\lfloor\frac{n}{p}\rfloor\times p)\times (\lfloor\frac{n}{p}\rfloor\times p+1)\times…\times n\)
由于 \(\operatorname{F}(n,p)\)\(p\) 的倍数全部被去掉(注意 \(p\) 是个质数),所以
\(\begin{align}\operatorname{F}(n,a)&\equiv\operatorname{H}(1\times 2\times …\times (p-1)\times 1\times (p+1)\times …\times (2p-1)\times 2\times (2p+1)\times…\times (\lfloor\frac{n}{p}\rfloor\times p-1)\times\lfloor\frac{n}{p}\rfloor\times (\lfloor\frac{n}{p}\rfloor\times p+1))\times …\times n,p)\pmod p\\ &\equiv\operatorname{H}((1\times 2\times …\times (p-1))\times 1\times (1\times 2\times …\times (p-1))\times 2\times…\times(1\times 2\times…\times (p-1))\times\lfloor\frac{n}{p}\rfloor\times (1\times …\times (n\bmod p)),p)\pmod p\\ &\equiv\operatorname{H}(((p-1)!)^{\lfloor\frac{n}{p}\rfloor}\times (n\bmod p)!\times \lfloor\frac{n}{p}\rfloor!,p)\pmod p\\ &\equiv\operatorname{H}((-1)^{\lfloor\frac{n}{p}\rfloor}\times (n\bmod p)!\times \operatorname{F}(\lfloor\frac{n}{p}\rfloor,p),p)\pmod p\\ &\equiv(-1)^{\lfloor\frac{n}{p}\rfloor}\times(n\bmod p)!\times \operatorname{F}(\lfloor\frac{n}{p}\rfloor,p)\pmod p\\ \end{align}\)
提前预处理出 \([1\to (p-1)]!\bmod p\),时间复杂度 \(O(p)\)
递归调用 \(O(\log n)\) 层,每一层 \(O(1)\),所以总时间复杂度 \(O(p+\log n)\)

二、计算 \(v_p(n!)\)

定理 1(Legendre 公式) \(v_p(n!)=\sum\limits_{i=1}\limits^{\infty}\lfloor\frac{n}{p^i}\rfloor\)

证明:
依然可以用如上的方法。
\(\begin{align}v_p(n!) &=v_p(1\times 2\times 3\times …\times n)\\&=v_p(1\times 2\times…\times (p-1)\times p\times (p+1)\times …\times (2p-1)\times 2p\times (2p+1)\times …\times (\lfloor\frac{n}{p}\rfloor\times p-1)\times(\lfloor\frac{n}{p}\rfloor\times p)\times (\lfloor\frac{n}{p}\rfloor\times p+1)\times …\times n)\\ &=\lfloor\frac{n}{p}\rfloor+v_p(1\times 2\times …\times (p-1)\times 1\times (p+1)\times (p+2)\times …\times (2p-1)\times 2\times…\times\lfloor\frac{n}{p}\rfloor\times (\lfloor\frac{n}{p}\rfloor\times p+1)\times …\times n)\\ &=\lfloor\frac{n}{p}\rfloor+v_p(1\times 2\times…\times\lfloor\frac{n}{p}\rfloor)\\ &=\lfloor\frac{n}{p}\rfloor+v_p(\lfloor\frac{n}{p}\rfloor!)\\ \end{align}\)
归纳得出 \(v_p(n!)=\sum\limits_{i=1}\limits^{\infty}\lfloor\frac{n}{p^i}\rfloor\)
证毕

推论 1 \(v_p(n!)=\frac{n-S_p(n)}{p-1}\)
证明:假设 \(n\)\(p\) 进制下是 \(\overline{a_1a_2…a_c}\),那么我们可以知道,由拉格朗日公式,\(v_p(n!)=\sum\limits_{i=1}\limits^{\infty}\lfloor\frac{n}{p^i}\rfloor=\sum\limits_{i=1}\limits^{c-1}\overline{a_1a_2…a_{c-i}}\)
考虑每一位的贡献,知道 \(v_p(n!)=\sum\limits_{i=1}\limits^{c-1}\sum\limits_{j=0}\limits^{i-1}(a_{c-i}\times p^j)\)
将等比数列求和,可以推出
\(\begin{align}v_p(n!)&=\sum\limits_{i=1}\limits^{c-1}(a_{c-i}\times\frac{p^i-1}{p-1})\\ &=\frac{\sum\limits_{i=1}\limits^{c-1}a_{c-i}\times(p^i-1)}{p-1}\\ &=\frac{\sum\limits_{i=1}\limits^{c-1}a_{c-i}\times p^i-\sum\limits_{i=1}\limits^{c-1}a_{c-i}}{p-1}\\ &=\frac{\sum\limits_{i=1}\limits^{c}a_{c-i}\times p^i-\sum\limits_{i=1}\limits^{c}a_{c-i}}{p-1}\\ &=\frac{n-S_p(n)}{p-1}\end{align}\)
证毕

进一步可以知道,\(v_2*(n!)=n-S_p(n)\)

三、Kummer 定理

易知 \(v_p(C_m^n)=\frac{S_p(n)+S_p(m-n)-S_p(m)}{p-1}\)

定理 2(Kummer 定理) \(p\) 在组合数 \(C_m^n\) 中出现的次数,恰好是 \(p\) 进制下 \(m-n\) 要借位的次数。

特别地,\(v_2(C_m^n)=S_p(n)+S_p(m-n)-S_p(m)\)

posted @ 2023-05-18 15:02  lrxQwQ  阅读(63)  评论(0编辑  收藏  举报