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

如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。

 

Input输入一个数N(N <= 10^6)Output输出>=N的最小的质数中的质数。Sample Input

20

Sample Output

31

用eular质数筛即可

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 
 7 using namespace std;
 8 char isprime[10000005];
 9 int primelist[10000005];
10 
11 int Eular(int n)
12 {
13     int cnt=0,x;
14     memset(isprime,1,sizeof(isprime));
15     int i=2;
16     while(x<n)
17     {
18         if(isprime[i])
19         {
20             cnt++;
21             primelist[cnt]=i;
22             if(isprime[cnt])
23                 x=i;
24         }
25         for(int j=1;j<=cnt&&i*primelist[j]<=1e7;j++)
26         {
27             isprime[i*primelist[j]]=0;
28             if(i%primelist[j]==0)
29                 break;
30         }
31         i++;
32     }
33     return x;
34 }
35 
36 int main()
37 {
38     int n;
39     while(~scanf("%d",&n))
40     {
41         printf("%d\n",Eular(n));
42     }
43     
44     
45     return 0;
46 }

 

posted @ 2017-08-18 08:51  西北会法语  阅读(231)  评论(0编辑  收藏  举报