关于n!mod p

2016.1.26

让我们来研究一下关于n!在mod p下的性质,当然这里p是质数。

首先n!=a*pe,其中p不可整除a。我们现在来做两件事情,求e和a mod p.

显然,n/p表示[1,n]中p的倍数的个数,我们把[1,n]所有的数都除以p,那么剩余的数里还是p的倍数的数在除之前一定至少含有因子p2,那么在除以p之后的序列里p的倍数的个数就是n/p2

如此下去,我们便可以知道,n!所含因子p的个数e=n/p+n/p2+n/p3+……

这样算出来的时间复杂度显然是O( logp(n) ).

然后再说a mod p怎么做。

显然[1,n]中非p倍数模p的余数成周期性,如下所示:

1,2,3,…,p-1,1,2,…,p-1,1,2,…,p-1,1,2,…,n mod p(最后一个周期可以不完整)

那么,就有a=(p-1)!(n/p) * (n mod p)!.

根据威尔逊定理,(p-1)!≡-1(mod p).

于是就有a≡(-1)(n/p) * (n mod p)! (mod p)

这下好办了吧

上一篇:-Android -线程池 批量上传图片 -附php接收代码


下一篇:VS2012 单元测试之泛型类(Generics Unit Test)