质数中的质数(质数筛选法)(51nod)

1181 质数中的质数(质数筛法) 

题目来源: 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_42373330/article/details/82221270