首页 > 代码库 > 51Nod 1181 质数中的质数(质数筛法)

51Nod 1181 质数中的质数(质数筛法)

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1181

如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如: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 <algorithm> 4 #include <cstring> 5 #include <string> 6 #include <cmath> 7 using namespace std; 8 #define ll long long 9 const int N=10005;10 const int mod=1e9+7;11 const int maxn=1e7;12 int prime[maxn];13 void getPrime()14 {15     memset(prime,0,sizeof(prime));16     for(int i=2;i<=maxn;i++){17         if(!prime[i]) prime[++prime[0]]=i;18         for(int j=1;j<=prime[0]&&prime[j]<=maxn/i;j++){19             prime[prime[j]*i]=1;20             if(i%prime[j]==0) break;21         }22     }23 }24 int main()25 {26     int n;27     getPrime();28     while(cin>>n){29         int flag=0;30         for(int i=1;i<=n;i++){31             if(prime[i]>=n){32                 flag=i;33                 break;34             }35         }36         for(int i=1;i<=flag;i++){37             if(prime[i]>=flag){38                 flag=i;39                 break;40             }41         }42         cout<<prime[prime[flag]]<<endl;43     }44     return 0;45 }

51Nod 1181 质数中的质数(质数筛法)