如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如: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 }
时间: 2024-10-25 17:26:20