题目1040:Prime Number
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:8637
解决:3419
-
题目描述:
-
Output the k-th prime number.
-
输入:
-
k≤10000
-
输出:
-
The k-th prime number.
-
样例输入:
-
3 7
-
样例输出:
-
5 17
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7764-1-1.html
-
- 思路:没有什么比较好的方法 ,就是要生成相应个数的素数
-
#include <iostream> #include<cmath> #include <fstream> using namespace std; int prime[10001]={0,2,3,5,7,11,13}; int main() { ifstream in; in.open("3.txt"); for(int i=7;i<10001;++i)//生成素数 { bool flag=false; int n=prime[i-1]+2; while(flag==false) { int j; for(j=2;j<=sqrt(n);++j) { if(n%j==0) { n=n+2; break; } } if(j>sqrt(n)) { prime[i]=n; flag=true; } } } int m; while(cin>>m) { cout<<prime[m]<<endl; } return 0; }
(2)来个算法时间更低的 -
#include <iostream> #include<cmath> #include <fstream> using namespace std; int prime[10001]={0,2,3}; int main() { ifstream in; in.open("3.txt"); int cnt=3; for(int i=5;cnt<10002;i+=2)//生成素数 { bool flag=true; for(int j=1;prime[j]*prime[j]<=i;++j) { if(i%prime[j]==0) { flag=false; break; } } if(flag==true) prime[cnt++]=i; } int m; for(int i=1;i<26;++i) cout<<prime[i]<<endl; while(cin>>m) { cout<<prime[m]<<endl; } return 0; }