如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
我的思路很简单,筛选玩后,将留下来的数再筛选一遍,就能解决问题了。
<span style="font-size:24px;">#include"stdio.h" #include"stdlib.h" #include"string.h" #include"algorithm" #include"math.h" const int maxn=1e6+5; int prim[maxn]; int pprim[maxn]; int pp_len; void prime() { memset(prim,0,sizeof(prim)); memset(pprim,0,sizeof(pprim)); prim[1]=1; int m=sqrt(maxn+0.5); for(int i=2;i<=m;i++) { if(!prim[i]) //还没选 for(int j=i*i;j<=maxn;j+=i) prim[j]=1; } pp_len=1; for(int i=2;i<=maxn;i++) if(!prim[i]) pprim[pp_len++]=i; //再筛选一次 pprim[1]=0; m=sqrt(pp_len+0.5); for(int i=2;i<=m;i++) if(pprim[i]) for(int j=i*i;j<=pp_len;j+=i) pprim[j]=0; } int main() { int n; prime(); scanf("%d",&n); for(int i=0;;i++) if(pprim[i]>=n) { printf("%d\n",pprim[i]); break; } return 0; }</span>