51Nod 1181 质数中的质数(质数筛选好题)(数论)

来源:互联网 发布:单片机第二章答案详解 编辑:程序博客网 时间:2024/06/02 12:15

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

1 0
原创粉丝点击