以下两个程序是输出101--200间的所有素数,几乎一样的程序,运行的结果不一样,为什么?请各位交流一下.

来源:百度知道 编辑:UC知道 时间:2024/06/01 10:34:46
main()
{
int i,j,n=0;
for(i=101;i<=200;i++)
{ for(j=2;j<=i-1;j++)
{ if(i%j==0)
break;}
if(j==i-1)
{printf("%4d",i);
n++;
}
}
printf("\nall:%d",n);getch();
}
为何结果为all=0

main()
{
int i,j,n=0;
for(i=101;i<=200;i++)
{ for(j=2;j<=i-1;j++)
{ if(i%j==0)
break;
if(j==i-1)
{printf("%4d",i);
n++;
}
}
}
printf("\nall:%d",n);getch();
}
问题补充:if(j==i-1),是素数时,j为何不是>i-1.
第二个程序为何j==i-1,哪位大哥能给我详细讲解一下它的运行过程,不胜感激.

第一个程序
if(j==i-1)
{printf("%4d",i);
n++;
}
判断条件不对,改为 if(j==i)即可,第二个没什么问题

第一个程序判断质数是在内层循环外的,第二个程序判断质数是在内层循环内的,注意大括号的打法,在循环外,如果循环执行完,j是等于i而不是i-1的

为何结果为all=0

for(j=2;j<=i-1;j++)
{
if(i%j==0)
break;
} //如果i是素数,出来的时候j==i所以j==i-1为假,老毛病,临界值判断错误
if(j==i-1)
问题补充:if(j==i-1),是素数时,j为何不是>i-1.
老毛病,都不是,是j==i,j是i的最小约数(不包括1)

在多说几句,
没有必要把J的范围搞那么大,INT(SQRT(I))做上界足够了

这个算法不对啊,这样不能算出素数吧