![51nod-1181-两次筛法 51nod-1181-两次筛法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwyWnBiR1V1TlRGdWIyUXVZMjl0TDJsdFlXZGxjeTlwWTI5dUwzTjBZWEl1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
![51nod-1181-两次筛法 51nod-1181-两次筛法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwyWnBiR1V1TlRGdWIyUXVZMjl0TDJsdFlXZGxjeTlwWTI5dUwzQnNkWE11Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
筛法两次就好了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
#define pii pair<int,int>
#define LL long long
#define mp make_pair
#define pb push_back
#define inf 0x3f3f3f3f bool is[];
vector<int>prime1,prime2;
void init(){
is[]=is[]=;
for(LL i=;i<=;++i){
if(!is[i]){
prime1.push_back(i);
for(LL j=i*i;j<=;j+=i) is[j]=;
}
} memset(is,,sizeof(is));
is[]=is[]=;
for(LL i=;i<=prime1.size();++i){
if(!is[i]){
prime2.push_back(prime1[i-]);
for(LL j=i*i;j<=prime1.size();j+=i)is[j]=;
}
}
}
int main(){
int n;
init();
cin>>n;
cout<<*lower_bound(prime2.begin(),prime2.end(),n)<<endl;
return ;
}