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;
}