Logo UKBwyx的博客

博客

组合数的 514 种求法

2025-11-24 10:04:44 By UKBwyx

给定 $n,m,p$,求出 $(^n_m)\mod p$ 的值。

你可以认为 $0 \le m\le n$。

前面省略 $512$ 种简单求法。

$n,m\le 10^{18}$,$p\le 10^6$

这个用 exlucas 即可,时间复杂度 $O(p\log p)$ 左右,应该不能做到更优了。

$m\le 10^6$,$n\le 10^{18}$,$p\le 10^{18}$

考虑 $1$ 到 $m$ 中的质数是否是 $p$ 的因数。

如果是的话,可以考虑记录每种质数在 $m!$ 里的出现次数和在 $\frac{n!}{(n-m)!}$ 的出现次数,这就和 exlucas 有点像了。

然后因为这种质数 $t$ 不超过 $\omega(p)$(?) 个,所以可以直接枚举 $t^k$,计算出现次数。

剩下的因为和 $p$ 互质,所以可以直接全部乘起来 exgcd。

然后这样是 $O(m+\omega(p)\log n)$ 的。

$n,m,p\le 10^{18}$

这玩意看起来就不能做。

于是组合数在 $m$ 比较小或 $p$ 比较小的时候都能做。

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。