质数筛法

Prime Number

http://www.nowcoder.com/questionTerminal/c5f8688cea8a4a9a88edbd67d1358415

/*
 * 输出第k个质数(质数筛法)
 */
#include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

const int MAXN = 1e5;

bool isPrime[MAXN];                 //标记数组
vector<int> prime;                  //保存质数

void initial(){                     //初始化
    fill(isPrime,isPrime+MAXN,true);
    isPrime[0]=false;
    isPrime[1]=false;
    for(int i = 2;i<MAXN;i++){
        if(!isPrime[i]){            //非质数,则跳过该数
            continue;
        }
        prime.push_back(i);
        for(int j = i+i;j<MAXN;j+=i){
            isPrime[j]=false;       //质数的倍数为非质数
        }
    }
    return;
}

int main(){
    initial();
    int k;
    while(scanf("%d",&k)!=EOF){
        printf("%d\n",prime[k-1]);
    }
    return 0;
}
全部评论

相关推荐

拉丁是我干掉的:把上海理工大学改成北京理工大学。成功率增加200%
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务