ナンバー1?(BSGS)

   私はああ印面の質問を見ることができます

 それは、感じがすることができ、実装BSGSの午後十分な理解をしたという事実に、前に一生懸命考えていませんでした。

   それは何であるBSGS? - 高次合同方程式を解くことができます。明確かつ簡潔。

   勉強したい場合は、お勧めのブログの首長を話す、まだ非常に明確です。

   この質問は私たちのためです。

  我々は観察して見ることができ  、我々は9つの側面に加えて、Aとオリジナルの式を掛けることができ剰余の性質を 

   これは、ようBSGSは、標準式を発見しているメートルの保証が素数であるので、使用BSGSを拡大する必要はありません。

  その質問のヘッドはLLを爆破しようとしている私たちを見つけます

  大物は迅速に乗って、ラララを学ばなければならなかった、_int128を書きます

  クイックコードを取ります:
  

LL MUL(LL、LLのB、P LL)
{ 
    LLのL = *(B >> 25LL)%のP×(1LL << 25)%のP。
    LL Rは *(B&((1LL << = 25) - 1))%のPと、
    リターン(L + R)%のP。
}

 

  この場合、この質問はA、そして幸せになることができます。

   

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#define LL長い長
LLのK、P。
LL MUL(LL、LLのB、P LL)
{ 
    LLのL = *(B >> 25LL)%のP×(1LL << 25)%のP。
    LL Rは *(B&((1LL << = 25) - 1))%のPと、
    リターン(L + R)%のP。
} 
LLのKSM(LLのX、LL Y)
{ 
    LL用のRES = 1 (; Y、Y >> = 1、X = 1LL * MUL(X、X、P))
     であれば(Y&1)RES = 1LL * MUL(RES、X、P)。
    リターン解像度; 
} 
マップ <LL、LL> 融点;
INT メイン()
{ 
    scanf関数(" %のLLDの%のLLD "、&​​K&P)。
    K = 9 * K + 1、K%= P。
    LL M = CEIL(SQRT(P)); LL今= K。
    (LL i = 0 ; I <= M Iは++ 
    { 
        MP [今] = I + 1 (今、MUL = 10 、P)を、
    }  = 1 ; LL ANS = - 1 ; LL KK = KSM(10 、M)。
    (LL I = 1 ; I <= M; iは++ 
    {  = 1LL * MUL(今、KK、P)。
        場合 {ANS =([今] MP)iがM-MPを[今] + * 1ブレーク;} 
    } 
    のprintf(" %のLLD " 、ANS)。
    リターン 0 ; 
}

 

 

  

おすすめ

転載: www.cnblogs.com/Hale522520/p/10991361.html