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)\)。