51nod
题目链接
素数筛选
需要注意的地方是筛选的起始位置是j = i + i每次增加i,相当于把i所有的倍数除了自身全部划掉。
另一点是题目说的质数中的质数,计数从1开始,题目保证有解,所以找到了就可以输出。
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
const int maxn = 1e6+7;
int p[maxn]={0};
int prime[maxn];
int k = 1;
int isPrime( ){
for(int i = 2; i < maxn; i++){
if(!p[i]){
prime[k++] = i;
for(int j = i + i; j < maxn; j += i ) p[j] = 1;
}
}
}
int main(){
int n;
cin >> n;
p[0] = 1;
p[1] = 1;
isPrime();
int t = lower_bound(prime + 1,prime + k + 1, n) - prime;
for(int u = t; u < k; u++){
if(p[u] == 0){
cout<<prime[u]<<endl;
break;
}
}
return 0;
}