因为一个数的因数是成对出现的,其中一个因数在开方后的前面一个在开方后的后面,所以只需判断它前面的数就可以了,如果前面都没有,那么它后面更不会有.这样就可以减少循环次数.
#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;
}