您的位置:首页 > 其它

题目1040:Prime Number(素数的生成)

2017-04-14 22:11 274 查看
题目1040:Prime Number

时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:8637

解决:3419

题目描述:

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
思路:没有什么比较好的方法 ,就是要生成相应个数的素数
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: