题目1040:Prime Number
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:8894
解决:3526
-
题目描述:
-
Output the k-th prime number.
-
输入:
-
k≤10000
-
输出:
-
The k-th prime number.
-
样例输入:
-
3 7
-
样例输出:
-
5 17
-
这题用素数筛法做比较好。昨晚上刚学会了这个方法,结果今天一写出来,本地直接崩溃了。。。直觉告诉我肯定是数组越界了,因为毕竟这道题要输出第10000个素数。于是我把int类型换成了long.........
也就是说我记错了,long和int都是4个字节32位的,我又把int记成16位的了。。调试才发现int到了65537还有值,我就明白了。。实际上第100000个素数也才100000多,我用int和long都不行的原因是,我在标记非素数的时候,是从j=i*i开始的,这个乘法可能导致结果超过32bit数表示的范围,于是把j=i*i改成j=i(但这样会导致一些重复工作),或用long long就可以了,一遍AC
#include <iostream>
#include <cstdio>
#define N 110001
using namespace std;
bool mark[N];
int prime[N];
void init()
{
int size=1;
for(long long i=2;i<N;i++){
if(mark[i]!=true){
prime[size++]=i;
for(long long j=i*i;j<N;j+=i){
mark[j]=true;
}
}
}
}
int main()
{
init();
int k;
while(scanf("%d",&k)!=EOF){
printf("%d\n",prime[k]);
}
return 0;
}