Pseudoprime番号POJ 3641(高速電力)

オリジナルタイトル

トピックリンク

トピック分析

まず、pは素数で検出する必要があります質問の意味によると、これは、そうでなければ、それは合成数だった、できない、そしてそれが素数であるその後、pはこれらの数字割り切れることができるかどうかについて決定し、エジプトのスクリーンアウト1-SQRT(1E9)素数をふるいすることができます。Asをp番目の電源は、直接ライン上で高速電力を設定します。

コード

1の#include <cstdioを>
 2の#include <cstdlib>
 3の#include <iostreamの>
 4の#include <アルゴリズム>
 5の#include <ユーティリティ>
 6の#include <ctimeの>
 7の#include <cmath>
 8の#include <CStringの>
 9# <含む文字列 >
 10の#include <積層>
 11の#include <キュー>
 12の#include <ベクトル>
 13の#include < 設定 >
 14の#include <地図>
 15  
16  使って 名前空間STDを、
17のtypedef 長いです ロングLL;
18  CONST  INT INF_INT = 0x3f3f3f3f 19  CONST LL INF_LL = 0x3f3f3f3f3f3f3f3f 20  
21  のconst  INT MAX = 40000 22  ブールis_prime [MAX]。
23  INT プライム[MAX];
24  int型のCNT;
25  
26  ボイドプレ()
 27  {
 28      のためにint型 I = 2 ; iは、MAXを<; iは++)is_prime [I] = 29      のためのint型I = 2 ; iは、MAXを<; iは++ 30      {
 31          であれば(is_prime [I])
 32          {
 33              プライム[CNT ++] = I。
34              のためにINT J =(I << 1); J <MAX; J + = I)is_prime [j]は= 35          }
 36      }
 37  }
 38  
39  LLのq_power(LL、LLのB、LLのMOD)
 40  {
 41      LLのRES = 1 42      %= MOD。
43      一方、(B)
 44      {
 45         もし(B&1)RES =(RES * A)%のMOD。
46          A =(* A)%MOD。
47          B >> = 1 48      }
 49      リターンのres;
50  }
 51  
52  ブールチェック(LL X)
 53  {
 54      であれば(X <MAX)戻りis_prime [X]。
55      については、int型私= 0 ;私はCNT <I ++は56が         あれば(!(X%がプライム[i]は))を返す 57      リターン 58  }
 59  
60  のint main()の
 61  {
 62  //     freopenは( "black.in"、 "R"、STDIN)。
63  //     freopenは( "black.out"、 "W"、STDOUT)。
64      プレ()。
65      LLのA、P。
66      しばらく(〜のscanf(" %のLLDの%のLLD "、&​​P&A)&&(|| P))
 67      {
 68          であれば(q_power(P、P)== &&!チェック(P))のprintf(" はい\ nを" );
69          他の printf関数(" なし\ nを" );
      リターン 0 ;
72 }

 

おすすめ

転載: www.cnblogs.com/VBEL/p/11444655.html