CC's

Back

Farmer John keeps a website called ‘FansBlog’ .Everyday , there are many people visited this blog.One day, he find the visits has reached P , which is a prime number.He thinks it is a interesting fact.And he remembers that the visits had reached another prime number.He try to find out the largest prime number Q ( Q < P ) ,and get the answer of Q! Module P.But he is too busy to find out the answer. So he ask you for help. ( Q! is the product of all positive integers less than or equal to n: n! = n * (n-1) * (n-2) * (n-3) *… * 3 * 2 * 1 . For example, 4! = 4 * 3 * 2 * 1 = 24 )

First line contains an number T(1<=T<=10) indicating the number of testcases. Then T line follows, each contains a positive prime number P (1e9≤p≤1e14)

分析#

这题得知道2个结论,然而我都不知道。

威尔逊定理#

当P为质数时,(P1)!1(modP)(P-1)! \equiv -1 \pmod P.

注意这里!!是阶乘,不是取反的意思。

素数分布#

当范围变大时,素数的出现频率增高,寻找一素数的相邻素数复杂度逐渐趋近于线性。

所以,寻找素数P的前一个素数可以直接暴力找。找到之后利用(P1)!1(modP)(P-1)! \equiv -1 \pmod P即可快速由P1P-1的阶乘通过逆元转到QQ的阶乘,这题就做完了。

因为在计算逆元时会爆ll,使用快速乘法来避免,复杂度符合要求。

代码#

Fansblog
https://astro-pure.js.org/blog/fansblog
Author Cheng Chen
Published at 2019年8月1日
Comment seems to stuck. Try to refresh?✨