九度题目1040:Prime Number
2017-09-19 10:22
316 查看
题目描述:
Output the k-th prime number.
输入:
k≤10000
输出:
The k-th prime number.
样例输入:
样例输出:
来源:2008年上海交通大学计算机研究生机试真题答疑:解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7764-1-1.html
易错点:由刘汝佳紫书《算法竞赛入门经典》所介绍的素数定理,可以得到当maxn为10^6时,不超过maxn的素数个数为78498,故maxn可以取为1e6+1.
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; }
相关文章推荐
- 九度OJ题目1040:Prime Number
- 九度 oj 题目1040:Prime Number
- 题目 1040 Prime Number 九度Online Judge
- 【九度】题目1040:Prime Number
- 【九度OJ】题目1040:Prime Number 解题报告
- 题目1040:Prime Number
- 题目1040:Prime Number(第k个素数)
- 题目1040:Prime Number(素数的生成)
- 九度OJ—题目1040:Prime Number
- 题目1040:Prime Number
- 九度1040 Prime Number
- 题目1040:Prime Number
- 题目1040:Prime Number
- JD 题目1040:Prime Number (筛法求素数)
- 题目1040:Prime Number
- 52-题目1040:Prime Number
- 题目1040:Prime Number
- 题目1040:Prime Number
- 九度1040:Prime Number
- 九度OJ 1040 Prime Number (筛素数,试除法)