1181 质数中的质数(质数筛法) 51nod-1181-两次筛法_ios
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
51nod-1181-两次筛法_ios_02 收藏
51nod-1181-两次筛法_ios_03 关注
如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
 
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
    筛法两次就好了。
    
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<vector>
 6 #include<algorithm>
 7 using namespace std;
 8 #define pii pair<int,int>
 9 #define LL long long 
10 #define mp make_pair
11 #define pb push_back
12 #define inf 0x3f3f3f3f
13 
14 bool is[1000010];
15 vector<int>prime1,prime2;
16 void init(){
17     is[0]=is[1]=1;
18     for(LL i=2;i<=1000000;++i){
19         if(!is[i]){
20         prime1.push_back(i);
21         for(LL j=i*i;j<=1000000;j+=i) is[j]=1;
22         } 
23     }
24     
25     memset(is,0,sizeof(is));
26     is[0]=is[1]=1;
27     for(LL i=2;i<=prime1.size();++i){
28         if(!is[i]){
29             prime2.push_back(prime1[i-1]);
30             for(LL j=i*i;j<=prime1.size();j+=i)is[j]=1;
31         }
32     }
33 }
34 int main(){
35     int n;
36     init();
37     cin>>n;
38     cout<<*lower_bound(prime2.begin(),prime2.end(),n)<<endl;
39     return 0;
40 }