[数論] - オイラーの定理

今日は、質問を参照するには荒れた海での釣り:

 

 これは、あなたの裸の簡単な質問の力ではないでしょうか?

そして、データ範囲を見て:

 

 Bのこの範囲は、私をおびえさせます。

いくつかの研究の後、最初の研究この質問は以下のとおりです。

オイラーの定理はオイラーの定理を拡張します&

証明結論に直接進んでください:

 

 

 

 (图源OI wiki)

だから、この質問は、最初のオイラーの関数に対処した後、オイラーに従って解決拡大することです。するBを注意モジュロ入力側を左右

オイラーは、関数を扱います:

  画面と同様の線形プライム、あなたはよく理解、標準的なプロセスを見ることができます。

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3 typedefの長い 長いLL。
4  CONST LL M = 1E6 + 10 5つの LLのANS [M]、PHI [M]。
6  LLのCNT。
7  のLL M、B。
8  ボイドEulersieve(){
 9つの      PHI [ 1 ] = 1 10      のために(LL I = 2 ; I <= M; iが++ ){
 11          であれば(!PHI [i])と{
 12              のための(J + =; J <= MのLL J = {I)
 13                  もしPHI [j]が=(PHI [j]が!)J。
14の                  PHI [j]は= PHI [J] / Iは、(I-* 1 )。
15              }
 16          }
 17      }
 18  } 
 19が 読み出さ11(){
 20      LL X = 0、F = 1 21      チャー C = GETCHAR()。
22      ながら(!isdigit(C)){
 23          であれば(C == ' - ')、F = - 1 24          C = GETCHAR()。
25      } 
 26      しばらく(isdigit(C)){
 27          、X = X * 10 + C- ' 0 ' 28          C = GETCHAR()。
29      }
 30      リターンのx *のF。
31  }
 32  LL getb(){
 33      LL X = 0、フラグ= 0 34      チャー C = GETCHAR()。
35      ながら(!isdigit(C)){
 36          C = GETCHAR()。
37      }
 38      ながら(isdigit(C)){
 39          、X =(X * 10+ C- ' 0 ' )。
40          であれば(X> = PHI [M]){
 41              、フラグ= 1 42              X%= PHI [M]。
43          }
 44          C = GETCHAR()。
45      }
 46      場合(X> = PHI [M]){
 47          、フラグ= 1 48          X%= PHI [M]。
49      }
 50      リターンフラグ== 1 X +?PHI [M]:X。
51  }
 52  LLのQP(LL N、LLのP){
 53     LL RES = N、ANS = 1 54      一方、(P){
 55          であれば(P&1 ){
 56の              ANS =(RES * ANS)%のM。
57          }
 58の          RES =(RES * RES)%のM。
59          P >> = 1 60      }
 61の     リターンANS。
62  }
 63  、INT (){主
 64      = 読み取りを();
65      、M = )(読み取ります。
66      Eulersieve()。
67      B = getb()。
68      のprintf(" %のLLD " 、QP(b)参照)。
69      リターン 0 ;    
70 }

おすすめ

転載: www.cnblogs.com/Nelson992770019/p/11517149.html