n!mod p的求法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了n!mod p的求法相关的知识,希望对你有一定的参考价值。

我们假设p为素数,n!=a*pe,则我们需要求解a mod p和e。

e是n!能够迭代整除p的次数,因此可以使用下面式子计算:

n/p+n/p2+n/p3……

我们只需要对pt≤n的t进行计算所以复杂度为O(logpn)

 

接下来计算a mod p。

首先计算n!的因数中不能被p整除的项的积。

举个简单的例子后不难发现,不能被p整除的项在mod p下呈周期性。

因此,可将n!的因数中不能被p整除的项的积化为如下式子:

(p-1)!(n/p)*(n mod p)!。

根据威尔逊定理,我们有(p-1)!≡-1。所以这时候我们只需要求n/p的奇偶和(n mod p)!就可以了。

//威尔逊定理及证明见:http://www.cnblogs.com/wls001/p/5160288.html

这时我们只有预处理出0<=n<p的范围中n! mod p 的表就可以在O(logp n)时间内算出答案了。如果不预处理,那么复杂度就是O(p logp n)。

以上是关于n!mod p的求法的主要内容,如果未能解决你的问题,请参考以下文章

NTT小结及原根求法

NTT

总结四种逆元的求法

二项分布概率最大项K的求法公式 k=(n+1)p是怎么推导的?

逆元以及线性逆元求法(转)

欧拉函数求法(N)