您的位置:首页 > 其它

九度题目1040:Prime Number

2017-09-19 10:22 316 查看
题目描述:

Output the k-th prime number.
输入:

k≤10000
输出:

The k-th prime number.
样例输入:
3
7

样例输出:
5
17

来源:2008年上海交通大学计算机研究生机试真题答疑:解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7764-1-1.html

易错点:由刘汝佳紫书《算法竞赛入门经典》所介绍的素数定理,可以得到当maxn为10^6时,不超过maxn的素数个数为78498,故maxn可以取为1e6+1.

#include <cstdio>
#include <cmath>
const int maxn=1e6+1;
int prime[maxn],num=0;
int vis[maxn]={0};

void find_prime(){
int m=round(sqrt(maxn-1));
for(int i=2;i<=m;i++) if(!vis[i])
for(int j=i*i;j<maxn;j+=i) vis[j]=1;
for(int i=2;i<maxn;i++) if(!vis[i]) prime[num++]=i;
}

int main(){
int k;
find_prime();
while(scanf("%d",&k)==1){
printf("%d\n",prime[k-1]);
}
return 0;
}
#include <cstdio>
#include <cmath>
const int maxn=2e5+1;
int prime[maxn],num=0;
int vis[maxn]={0};

int is_prime(int n){
if(n<=1) return 0;
int m=round(sqrt(n));
for(int i=2;i<=m;i++)
if(n%i==0) return 0;
return 1;
}

void find_prime(){
for(int i=2;i<maxn;i++) if(is_prime(i)) prime[num++]=i;
}

int main(){
find_prime();
int k;
while(scanf("%d",&k)==1){
printf("%d\n",prime[k-1]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学问题 素数