[51nod1181]质数中的质数(素数筛法)

解题关键: 注意下标

 1 #include<bits/stdc++.h>
 2 #define maxn 10000002
 3 using namespace std;
 4 typedef long long ll;
 5 bool is_prime[maxn+2];
 6 int prime[maxn+2];
 7 int sieve(){
 8     int p=0;
 9     fill(is_prime,is_prime+maxn,true);
10     is_prime[0]=is_prime[1]=false;
11     for(int i=2;i<maxn;i++){
12         if(is_prime[i]){
13             prime[p++]=i;
14             for(int j=2*i;j<=maxn;j+=i){
15                 is_prime[j]=false;
16             }
17         }
18     }
19     return p;
20 }
21 int main(){
22     int p=sieve();
23     int n;
24     cin>>n;
25     int t1=lower_bound(prime,prime+p,n)-prime+1;
26     int t2=lower_bound(prime,prime+p,t1)-prime;
27     cout<<prime[prime[t2]-1]<<endl;
28 }

 

posted @ 2017-05-27 18:55  Elpsywk  阅读(221)  评论(0编辑  收藏  举报