在一秒内求出第10000个质数的c语言实现
<span style="font-size:18px;">#include <stdio.h>
#define MAXNUM 10000
void func()
{
register int i, j;
int cnt;
int flag;
int findvalue[MAXNUM] ={2};
for(cnt = 1, i = 3; cnt < MAXNUM; i += 2)
{
for(j = 0; flag = ((findvalue[j] * findvalue[j]) <= i); j ++) {
if(!(i % findvalue[j]))break;
}
if(!flag)findvalue[cnt ++] = i;
}
printf("%d\n", findvalue[MAXNUM - 1]);
}
int main()
{
func();
return 0;
}</span>
这个其实代码很简单,自己过一遍就懂了,只是思想比较新:
简单说一下
先将2 填入数组findvalue 数组中,i 控制循环,从3开始,然后循环每次加2
这里为什么加2 呢? 因为从3 开始的连续的两个奇数之间总会有一个偶数,那偶数就不用判断了。
然后是里边的循环主要是用现在的每一个元素与findvalue 数组中的质数进行%运算
因为两个质数的乘积一定是一个非质数,所以该数不能被已有的比它小的所有质数整除,则加入findvalue 说明是质数。
这样当cnt== MAXNUM 时,findvalue数组中其实已经存了10000个质数了。
输出就OK了。