如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
46 ms 5924 KB
#include <stdio.h>
#include <string.h>
const int MAXN = 1000000;
int prime[MAXN],prime2[MAXN];
void is_prime(){
int i, j, k;
memset(prime, 0, sizeof(prime));
prime[1] = 1;
for(i = 2; i <= MAXN; ++i){
if(prime[i] == 0){
for(j = i, k = 1; j <= MAXN; j = k * i){
prime[j] = 1;
k++;
}
prime[i] = 0;
}
}
}
int get_prime(){
int i, j = 1;
for(i = 1; i < MAXN; ++i){
if(prime[i] == 0){
prime2[j] = i;
++j;
}
}
return j;
}
int main(){
int n, N;
is_prime();
n = get_prime();
scanf("%d", &N);
for(int i = 1; i < n; ++i){
if(prime2[i] >= N && prime[i] == 0){
printf("%d\n", prime2[i]);
break;
}
}
return 0;
}