OSDN Git Service

Update lucas.md
authorTonyYin0418 <69497477+TonyYin0418@users.noreply.github.com>
Thu, 29 Oct 2020 06:48:44 +0000 (14:48 +0800)
committerGitHub <noreply@github.com>
Thu, 29 Oct 2020 06:48:44 +0000 (14:48 +0800)
这样的推导过程更加详细

docs/math/lucas.md

index 446b06b..ca2ea1f 100644 (file)
@@ -61,36 +61,110 @@ Lucas 定理中对于模数 $p$ 要求必须为素数,那么对于 $p$ 不是
 
 ### 求解方式
 
-首先对于 p 进行质因数分解: $p=p_{1}^{k_1}p_{2}^{k_2}\cdots p_{n}^{k_n}$ ,则如果可以求出每个 $C_{n}^{m}\equiv a_i \pmod {p_{i}^{q_i}}$ ,那么对于同余方程组
+#### 层次一
 
+根据**唯一分解定理**,将 $p$ 质因数分解:
 $$
-\begin{cases}
-C_{n}^{m}\equiv a_1 \pmod {p_{1}^{q_1}}\\
-C_{n}^{m}\equiv a_2 \pmod {p_{2}^{q_2}}\\
-\,\,\,\,\vdots\\
-C_{n}^{m}\equiv a_n  \pmod {p_{n}^{q_n}}\\
-\end{cases}
+p=
+{q_1}^{\alpha_1}\cdot{q_2}^{\alpha_2}\cdots{q_r}^{\alpha_r}=\prod_{i=1}^{r}{q_i}^{\alpha_i}
 $$
+对于任意 $i,j$,有 ${p_i}^{\alpha_i}$ 与 ${p_j}^{\alpha_j}$ 互质,所以可以构造如下 $r$ 个同余方程:
+$$
+\left\{
+\begin{aligned}
+a_1\equiv C_n^m&\pmod {{q_1}^{\alpha_1}}\\
+a_2\equiv C_n^m&\pmod {{q_2}^{\alpha_2}}\\
+&\cdots\\
+a_r\equiv C_n^m&\pmod {{q_r}^{\alpha_r}}\\
+\end{aligned}
+\right.
+$$
+我们发现,在求出 $a_i$ 后,就可以用中国剩余定理求解出 $C_n^m$。
+
+#### 层次二
+
+根据同余的定义,$a_i=C_n^m\bmod {q_i}^{\alpha_i}$,问题转化成,求 $C_n^m\mod q^k(q\in\{$ 质数 $\})$ 的值.
+
+根据组合数定义 $C_n^m=\frac{n!}{m!(n-m)!}$,$C_n^m\bmod q^k=\frac{n!}{m!(n-m)!}\bmod q^k$.
+
+由于式子是在模 $q^k$ 意义下,所以分母要算乘法逆元。
+
+同余方程 $ax\equiv 1\pmod p$ (即乘法逆元)**有解**的充要条件为 $gcd(a,p)=1$(裴蜀定理),
+
+然而**无法保证有解**,发现无法直接求 $\operatorname{inv}_{m!}$ 和 $\operatorname{inv}_{(n-m)!}$,
+
+所以将原式转化为:
+$$
+\frac{\frac{n!}{q^x}}{\frac{m!}{q^y}\frac{(n-m)!}{q^z}}q^{x-y-z} \bmod q^k
+$$
+$x$ 表示 $n!$ 中包含多少个 $q$ 因子,$y,z$ 同理.
+
+#### 层次三
+
+问题转化成,求形如:
+$$
+\frac{n!}{q^x}\bmod q^k
+$$
+的值。
+
+先考虑 $n!\bmod q^k$
+
+比如 $n=22,p=3,k=2$ 时:
+
+$22!=1\times 2\times 3\times 4\times 5\times 6\times 7\times 8\times 9\times 10\times 11\times 12$
 
-使用中国剩余定理即可求出 $C_{n}^{m}$ 的值。
+$\times 13\times 14\times 15\times 16\times 17\times 18\times 19\times20\times21\times22$
 
-但是可以发现 $p_{i}^{q_i}$ 也不一定是素数,接下来介绍如何计算 $C_{n}^{m}\bmod p^t$ 。
+将其中所有 $p$ 的倍数提取,得到:
 
-首先由求组合数的公式 $C_{n}^{m}=\frac{n!}{m!(n-m)!}$ ,如果可以分别计算出 $n!, m!, (n-m)!$ 在模 $p^t$ 意义下的值,那么就可以得到答案。
+$22!=3^7 \times (1\times 2\times 3\times 4\times 5\times 6\times 7)$
+$\times(1\times 2\times 4\times 5\times 7\times 8\times 10 \times 11\times 13\times 14\times 16\times 17\times 19 \times 20 \times 22 )$
 
-以第一个式子为例,当 $p=3,t=2,n=19$ 时,有
+可以看到,式子分为三个部分
 
+**第一部分**是 $3$ 的幂,次数是 $\lfloor\frac{n}{q}\rfloor$;
+
+**第二部分**是 $7!$,即 $\lfloor\frac{n}{q}\rfloor!$,由于阶乘中仍然可能有 $q$ 的倍数,考虑递归求解;
+
+**第三部分**是 $n!$ 中与 $q$ 互质的部分的乘积,具有如下性质:
+
+$1\times 2\times 4\times 5\times 7\times 8\equiv10 \times 11\times 13\times 14\times 16\times 17\ \pmod{ 3^2}$
+
+即:
+$$
+\prod_{i,(i,q)=1}^{q^k}i\equiv\prod_{i,(i,q)=1}^{q^k}(i+tq^k)\ mod\ q^k
+$$
+($t$ 是任意正整数)
+
+$\prod_{i,(i,q)=1}^{p^k}i$ 一共循环了 $\lfloor\frac{n}{q^k}\rfloor$ 次,暴力求出 $\prod_{i,(i,q)=1}^{q^k}i$ ,然后用快速幂求
+
+$\lfloor\frac{n}{q^k}\rfloor$ 次幂
+
+最后要乘上 $\prod_{i,(i,q)=1}^{n\ mod\ q^k}i$ ,即 $19\times 20\times 22$,显然长度小于 $q^k$,暴力乘上去.
+
+上述三部分乘积为 $n!$。最终要求的是 $\frac{n!}{q^x}\bmod{q^k}$.
+
+
+
+所以有:
+$$
+{n!}=q^{\lfloor\frac{n}{p}\rfloor}\cdot (\lfloor\frac{n}{q}\rfloor)!\cdot(\prod_{i,(i,q)=1}^{q^k}i)^{\lfloor\frac{n}{q^k}\rfloor}\cdot(\prod_{i,(i,q)=1}^{n\bmod q^k}i)
 $$
-\begin{split}
-n!&=1\cdot 2\cdot 3\cdots 19\\
-&=(1\cdot 2\cdot 4\cdot 5\cdot 7\cdot 8\cdot 10\cdot 11\cdot 13\cdot 14\cdot  16\cdot 17\cdot 19)\cdot (3\cdot 6\cdot 9\cdot 12\cdot 15\cdot 18)\\
-&=(1\cdot 2\cdot 4\cdot 5\cdot 7\cdot 8\cdot 10\cdot 11\cdot 13\cdot 14\cdot  16\cdot 17\cdot 19)\cdot 3^6\cdot(1\cdot2\cdot3\cdot4\cdot5\cdot6)
-\end{split}
+于是:
 $$
+\frac{n!}{q^k}=
+{(\lfloor\frac{n}{q}\rfloor)!}\cdot(\prod_{i,(i,q)=1}^{q^k}i)^{\lfloor\frac{n}{q^k}\rfloor}\cdot(\prod_{i,(i,q)=1}^{n\bmod q^k}i)
+$$
+
+**${(\lfloor\frac{n}{q}\rfloor)!}$ 同样是一个数的阶乘,所以也可以分为上述三个部分,于是可以递归求解。**
+
+#### 总结
+
+对于 $C_n^m\bmod p$ ,我们将其转化为 $r$ 个形如 $a_i\equiv C_n^m\pmod {{q_i}^{\alpha_i}}$ 的同余方程并分别求解。
 
\8f¯ä»¥ç\9c\8bå\88°å\90\8eé\9d¢ä¸\80é\83¨å\88\86å\9c¨æ¨¡æ\84\8fä¹\89ä¸\8bç\9b¸å½\93äº\8e $(n/p)!$ ï¼\8cäº\8eæ\98¯å\8f¯ä»¥é\80\92å½\92è¿\9bè¡\8c计ç®\97
¯¹äº\8e $a_i\equiv C_n^m\pmod {{q_i}^{\alpha_i}}$ï¼\8cå°\86 $C_n^m$ è½¬å\8c\96为 $\frac{\frac{n!}{q^x}}{\frac{m!}{q^y}\frac{(n-m)!}{q^z}}q^{x-y-z}$ï¼\8cäº\8eæ\98¯å\8f¯æ±\82é\80\86å\85\83
 
\89\8dé\9d¢ä¸\80é\83¨å\88\86æ\98¯ä»¥ $p^t$ ä¸ºå\91¨æ\9c\9fç\9a\84ï¼\8cä¹\9få°±æ\98¯ $(1\cdot 2\cdot 4\cdot 5\cdot 7\cdot 8)\equiv (10\cdot 11\cdot 13\cdot 14\cdot 16\cdot 17)\ \pmod{3^2}$ ï¼\8cæ\89\80以å\8fªé\9c\80è¦\81计ç®\97æ\9c\80å\90\8eä¸\8d满足ä¸\80个å\91¨æ\9c\9fç\9a\84æ\95°æ\98¯å\93ªäº\9bå°±å\8f¯ä»¥äº\86ï¼\88è¿\99个ä¾\8bå­\90中就å\8fªè¦\81计ç®\97 $19$ ï¼\89ã\80\82æ\98¾ç\84¶ï¼\8cä¸\8d满足ä¸\80个å\91¨æ\9c\9fç\9a\84æ\95°ç\9a\84个æ\95°ä¸\8dè¶\85è¿\87 $p^t$ ä¸ª
¯¹äº\8e $\frac{m!}{q^y}$ å\92\8c $\frac{(n-m)!}{q^z}$ï¼\8cå°\86å\85¶å\8f\98æ\8d¢æ\95´ç\90\86ï¼\8cå\8f¯é\80\92å½\92æ±\82解
 
 ???+note "代码实现"
     其中 `int inverse(int x)` 函数返回 $x$ 在模 $p$ 意义下的逆元。