因为一个数的因数是成对出现的,其中一个因数在开方后的前面一个在开方后的后面,所以只需判断它前面的数就可以了,如果前面都没有,那么它后面更不会有.这样就可以减少循环次数.
#include<stdio.h>
#include<math.h>
int main()
{
int m,n;
int i,j;
int count=0;
int flag=1;
int flag2=0;
scanf("%d%d",&m,&n);
for(i=2;;i++){
for(j=2;j<=sqrt(i);j++){//for(j=2;j<sqrt(i)+0.5;j++){
if(i%j==0){
flag=0;
break;
}
}
if(flag){
count++;
if(count==m) flag2=1;
if(flag2){
if(count==n||(count-m+1)%10==0)
printf("%d",i);
else
printf("%d ",i);
if((count-m+1)%10==0) printf("\n");
}
if(count==n) break;
}
else{
flag=1;
}
}
return 0;
}
本文介绍了一种通过C语言实现的高效素数生成算法。该算法利用了因数配对特性来减少不必要的循环检查,从而显著提高了素数查找的速度。文章详细解释了如何通过检查小于等于一个数平方根的所有整数来判断该数是否为素数,并提供了完整的代码示例。
290

被折叠的 条评论
为什么被折叠?



