如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
C++的运行时限为:1000 ms ,空间限制为:131072 KB
代码实现:
1 #include<cstdio> 2 const int maxn=1100000; 3 const int minn=10000; 4 int n,a,b; 5 int s[maxn/10],m; 6 bool v[maxn]; 7 int main(){ 8 scanf("%d",&n); 9 v[0]=v[1]=1; 10 for(int i=2;i<=n+minn;i++) 11 if(!v[i]){ 12 a=i+i;s[m++]=i; 13 while(a<=n+minn){v[a]=1;a+=i;} 14 } 15 while(s[b]<n||v[b+1]) b++; 16 printf("%d ",s[b]); 17 return 0; 18 }
题目来源:51Nod