exlucas 学习笔记
跟 lucas
没关系……
事实上关键是让我们快速解决这样一个问题 \(n!\bmod p^k\)
这样的话就可以根据 \({n\choose m}=\dfrac{n!}{m!(n-m)!}\) 提取里面的 \(p\) 质因子的个数来快速计算取模
记 \(v_p(n)\) 满足 \(p^{v_p(n)}|n\) 且 \(p^{v_p(n)+1}\not|n\)
设 \(f_p(n)=\dfrac{n!}{p^{v_p(n!)}}\) ,那么就可以递归计算 \(f_p(n)\) 和 \(v_p(n)\)
具体来说
\[\begin{align}
n!&=1\times 2\times 3\dots\times n \\
&=p^{\lfloor\frac{n}{p}\rfloor}\lfloor\frac{n}{p}\rfloor!\prod_{p\not|i,i\leq n} i
\end{align}
\]
在 \(\pmod {p^k}\) 意义下
\[\begin{align}
f_p(n)&=f_p(\lfloor\frac{n}{p}\rfloor)\prod_{p\not|i,i\leq n} i &\pmod {p^k}\\
&=f_p(\lfloor\frac{n}{p}\rfloor) \prod_{p\not|i,i<p^k}{i}^{\lfloor\frac{n}{p^k}\rfloor} \prod_{p\not|i,i\leq(n\bmod p^k)} i &\pmod {p^k}
\end{align}
\]
可以在 \(\mathcal{O}(p^k\log_p n)\) 的复杂度下计算完成
如果提前知道模数,预处理 \(s_n=\prod_{p\not|i,i\leq n}i \pmod {p^k}\) 就可以 \(\mathcal{O}(\log_p n)\) 计算
同理 $$v_p(n)=v_p(\lfloor\frac{n}{p}\rfloor)+\lfloor\frac{n}{p}\rfloor$$
所以 $${n\choose m}=\frac{f_p(n)}{f_p(m)f_p(n-m)} p^{v_p(n)-v_p(m)-v_p(n-m)}\pmod {p^k}$$
\(CRT/exCRT\) 合并对所有 \(P=\prod p^k\) 的答案,\(\mathcal{O}(P)\),收工!