ファンのブログ

トピック住所: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 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/mile-star/p/11267332.html