题目来源: Sgu
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
3
贴上51nod里关鑫的代码
#include <cstdio>
#include <algorithm>
char f[1001001];
int prime[80000];
int cnt = 0;
void sieve( int x ) {
for( int i = 2; i <= x; ++i ) {
if( !f[i] ) {
prime[cnt++] = i;
if( i < 1002 ) for( int j = i * i; j <= x; j += i ) f[j] = 1;
}
}
}
int main() {
int n, pos;
scanf( "%d", &n );
sieve( n + 1000 );
pos = std::upper_bound( prime, prime + cnt, n - 1 ) - prime;
pos = std::upper_bound( prime, prime + cnt, pos ) - prime;
printf( "%d\n", prime[prime[pos]-1] );
return 0;
}