POJ - 2689プライム距離(区間ふるいです)

問題の意味:隣接プライムにおける最小値と最大要件[L、R]の差(間隔長は1E6を超えません)。

、、非素数$ N- $は必ずしも超えない$ \の主SQRTことN $が選別されて以来、最初の画面のでアウト$ [1、\ SQRT R]すべての素数$、その後$ [Lをスクリーニングするために、これらの素数を用いてR] $。

注1は素数ではありませんが、選別されることはありません(巨大ピット~~)

1の#include <cstdioを>
 2の#include <アルゴリズム>
 3  使用して 名前空間STDを、
4のtypedef 長い LL。
5  CONST LL N = 1E5 + 10、INF = 0x3f3f3f3f 6 LLのL、R、ISP1 [N]、ISP2 [N * 10 ]、PRI [N * 10 ]、Npriと。
7  ボイドgetpri1(){
 8      のための(LL I = 2 ; iがNを<; ++ I)ISP1 [I] = 1 9      (LL I = 2 ; iがNを<; ++ I)の場合(ISP1は[i])とするための(LL J =2 ; 私がj <Nを*; ++ j)がISP1 [iがjは*] = 0 ;
10  }
 11  空隙getpri2(){
 12      (LL i = 0 ; iが<= RL; ++ I)ISP2 [I] = 1 13      のために(LL I = 2 ; iは= Rを<*; ++ i)があれば(ISP1 [I])
 14              のための(LL J = MAX(2LL、(L- 1)/ I + 1)、iがjで* < = R; ++ j)はISP2 [私はJLを*] = 0 ;
15  }
 16  INT メイン(){
 17      getpri1()。
18      一方(scanf関数(" %のLLDの%のLLD "、&​​L&R)==2 ){
 19          getpri2()。
20          = Npriと0 21          のためには、(LL iはLを=; I <= R; ++ I)であれば(ISP2 [iLの】&& I =!1)PRI [Npriと++] = I。
22          であれば(Npriと< 2)プット(" なし隣接素数はありません。" )。
23          {
 24              LL MI = 1、MX = 1 25              のために(LL I = 2、I <Npriと; ++ I){
 26                  であれば(PRI [i]が-pri [I- 1 ] <PRI [MI] -pri [MI- 1])MI = I。
27                  であれば(PRI [i]が-pri [I- 1 ]> PRI [MX] -pri [MX- 1 ])MX = I。
28              }
 29              のprintf(" %のLLDは、%LLDは、%のLLD%のLLD最も近い最も離れている。\ n "、PRI [MI- 1 ]、PRI [MI]、PRI [MX- 1 ]、PRI [MX] );
30          }
 31      }
 32      リターン 0 33 }

 

おすすめ

転載: www.cnblogs.com/asdfsag/p/11270818.html