题目地址:http://ac.jobdu.com/problem.php?pid=1040
主要就是练习素数筛选法
*本题首先要注意:需要得到的最大一个素数是第10000个,那么要遍历的数至少要大于这个的100倍,这一点做题的时候不容易把握,会导致测试的结果很多都是0;
**(第一次写这个——————激动加紧张,以后技术练好了再美化)
#include<stdio.h>
#define N 1000000
int prime[N];
int mark[N];
//数组下标从1开始那么就需要多一个存储的空间,否则就是边界值不正确了
void init()
{
int i,j,k;
for(k=1;k<=N;k++)
{
mark[k]=0;//不是双等于
}
int size=1;
for(i=2;i<=N;i++)
{
if(mark[i]==0)
{
prime[size++]=i;
if(i>=10000)//这个是必须的,因为会在下面一句判别的时候引起越界,没有这一句依然会引起WA
continue;
for(j=i*i;j<=N;j+=i)
mark[j]=1;
}
}
}
int main()
{
init();
int n;
prime[0]=0;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",prime[n]);
}
return 0;
}