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)\),收工!

posted @ 2022-02-22 22:36  yyyyxh  阅读(16)  评论(0编辑  收藏  举报