#include<stdio.h>
#define N 200000
int main()
{
int i,j,m;
int count;
int a[N+1];
for(i = 0; i < N + 1; i++)
{
a[i] = 1;
}
a[0] = 0;
a[1] = 0;
for(i = 2;i < N + 1; i ++)
{
for(j = 2;j < N + 1 && i * j < N + 1; j ++)
a[i * j] = 0;
}
while(scanf("%d",&m)!=EOF)
{
count = 0;
for(i = 0 ;i < N + 1; i ++)
{
if(a[i])
{
count ++;
if(count == m)
printf("%d\n",i);
}
}
}
return 0;
}
一般素数判断方法常用一下三种:
1、最简单的方法:该算法的思想就是用2~sqrt(N),依次去对N求余,只要有一个余数是0,则N就不是素数。该方法虽然思路简单,但效率太低。故不适合于大范围的素数判断。
2、筛选法:该方法不是用来具体判断一个数是否是素数,而是用于判断一个范围内所有的素数。该方法的原理是:首先生成数组,然后从第一个开始依次标注它的倍数,然后从下一个没有被标注的开始,标注它所有的倍数,这样依次下去,最后没有被标注的都是素数。(本题所推荐采用的方法)
3、素数判断法:任何一个合数都可以表现为适当个素数的乘积的形式,所以我们只用素数去除要判断的数即可,比如要判断100以内的素数,只用2,3,5,7就够了,10000以内的数用100以内的素数判断足以。(该方法效率最高,但适应性不高,只适合不大的数)
在九度上看到一个哥们写的,觉得对我挺有帮助的,记录一下,长知识。