トピック住所:http://acm.hdu.edu.cn/showproblem.php?pid=6608
2019年夏ハング電気マルチ補正コンテスト3 1006
大きな素数Pの結果を考えると、最初はPがQよりも小さい素数を見つけるために、Qは、モジュロPの階乗を見つける:タイトルの意味を
思考:ウィルソンの定理:!尊重を素数Pに、(P-2)= 1(MOD P)
P及びQは、式Qに引き込まれてもよい!= 1 *(P-2)^(P-2)*(P-3)^(P-2)...(Q + 1)^(P -2)
遅すぎる実行が、ポイントができるがオーバーフロー、SQRT(n)を防止することができる__Int128逆元計算は、文章をプライミング。。。。
// // 2019年7月29日にマイルによって作成されます。 // // !威尔逊定理:(P-1)(MOD P)= -1(MOD P)+ __int128 の#include <ビット/ STDC ++ H> に#define LL __int128 使用名前空間STD。BOOL Isprime(長い長いX){ 長い長のANS = 1 。 以下のために(int型 I = 2 ; I <= SQRT(X); iは++ ){ 場合(Xの%iは== 0)を返す偽。 } を返す真。 } LLのqpow(-1,11,11-のB、LL c)は{ LL ANS = 1 。 一方、(b)は、{ もし、(B&1)ANS = ANS *%のC、= A *%のC; B >> = 1 。 } 戻りANS。 } int型のmain() { int型のT。 scanf関数(" %のD "、&T)。 一方、(t-- ){ 長い 長N。 scanf関数(" %のLLD "、& N) LL ANS= 1、P = N; N - = 2 。 一方、(!Isprime(N)){ ANS = ANS * qpow(N、P 2、P)%のP。 ANS%= P。 N - ; } 長い 長い X = qpow(P- 1、P- 2、P)%のP。 coutの << X << てendl; } 戻り 0 。 }