求助:if(i>=(int)sqrt(m))改为if(i=(int)sqrt(m))后的理解(已解决)
题目:求100至200间的全部素数#include<math.h>
main()
{
int m,i,n=0;
for(m=101;m<=200;m=m+2)
for(i=2;i<=sqrt(m);i++)
{
if(m%i==0)break;
if(i>=(int)sqrt(m))
{
printf("%d ",m);
n=n+1;
if(n%5==0)printf("\n");
}
}
getch();
}
======================
以上是完整的程序,
如果将该程序中的if(i>=(int)sqrt(m))改为if(i=(int)sqrt(m)),程序执行后,会输出像即121,169等非素数。
我是这样分析程序的:当m=121时,i<=11,利用m%i==0,可知,当程序执行到i=11时,break语句会跳出离他最近的for循环,不会再执行printf("%d ",m)这个语句,但是程序却输出了121这个非素数;但如果将if语句中的i=变为i>=,程序却会自动删除121,169等非素数,真的不明白这是怎么回事?望有心人指点。谢谢。
====================下面两位的解答还是没到题
当i=2时,自然会执行下面的语句,但if(i>=(int)sqrt(m))此条件则变为
if(2>=(int)sqrt(121)),明眼人一看,这条件是不可能成立的,故不会执行printf("%d ",m);当然也不可能输出121这个数字。 直至i变为11时,条件为真了,却跳出了for循环,真不明白为什么能输出个121
解答:if(i=(int)sqrt(m)),是赋值语句,故i=2时,会执行printf("%d ",m)这个语句,晕过头了。谢谢有心人啊。
[[it] 本帖最后由 恭喜我发财 于 2009-7-26 11:13 编辑 [/it]]