收藏
关注
如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如: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 }