-
题目描述:
-
Output the k-th prime number.
-
输入:
-
k≤10000
-
输出:
-
The k-th prime number.
-
样例输入:
-
3 7
-
样例输出:
-
5 17
/*
这是我自己写的代码,给的结果是Time Limit Exceed
超时,调用了C++ clock()方法,当输入10000的时候,时间超过了1s,所以报错!程序结果是没问题的
只能说OJ是有点坑爹!最烦的就是这种给一个很大的数需要逐个逐个判断的!
最后是AC大牛写的程序,贴出来大家参考参考,一起进步!
ps:真希望自己将来找工作的时候机试是真机考试而不是OJ,不然的话要哭了!
*/
#include <iostream>
using namespace std;
int main()
{
int n;
int i,j;
int count=0;
while (cin>>n)
{
count=0;
i=2;
//for (i=2;;i++)
if (n<1)
{
continue;
}
while (1)
{
for (j=2;j<=i;j++)
{
if (i==j)
{
count++;
//cout<<count;
}
if (i%j==0)
{
break;
}
}
if (n==count)
{
cout<<i<<endl;;
break;
}
i++;
}
}
return 0;
}
/**************************************************************
Problem: 1040
User: Carvin
Language: C++
Result: Time Limit Exceed
****************************************************************/
以下是来及于互联网的AC大牛写的:
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
#define M 1000010
bool flag[M];
int prime[M];
void getprime()
{
int cnt=1;
for(int i=2;i<M;++i)
{
if(!flag[i])
{
prime[cnt++]=i;
for(int j=i;j<M;j+=i)
flag[j]=true;
}
}
}
int main(int argc, char *argv[])
{
int k;
// freopen("1040.in","r",stdin);
getprime();
prime[0]=0;
while(scanf("%d",&k)!=EOF)
{
printf("%d\n",prime[k]);
}
return 0;
}