【51nod】1181 质数中的质数 - 质数筛法

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

题解:

易知,题目要我们求质数。

把求得的质数存放于数组 prime[MAXN] 中,同时用 tag[MAXN] 记录质数与非质数。

tag[i] == 0 为质数,tag[i] == 1 为非质数。

接着循环判断 prime[i] >= n && tag[i] == 0 即可。

为了提高效率,这里采用了线性筛法。

#include <cstdio>
#include <cstring>
using namespace std;

const int MAXN = 1e7;
int prime[MAXN];
int tag[MAXN];
int cnt = 1;

void Prime(){
	tag[0] = tag[1] = 1;
	for(int i = 2; i < MAXN; i++){
		if(!tag[i])
			prime[cnt++] = i;
		for(int j = 1; j <= cnt && prime[j]*i < MAXN; j++){
			tag[i*prime[j]] = 1;
			if(i % prime[j] == 0)
				break;
		}
	}
	return ;
}


int main(){
    Prime();
    int n;
    while(~scanf("%d", &n)){
        for(int i = 1; i < cnt; i++){
            if(prime[i] >= n && tag[i] == 0 ){
                printf("%d\n", prime[i]);
                break;
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Zy_Ming/article/details/82020134