#include <stdio.h> int main() { int m, n; for(m=2; m<=50; m++) { for(n=2; n<m; n++) { if( m%n==0 ) //什么条件下跳出当前循环 break; //这里应该退出当前循环了 } if(m == n) //n循环结束后,如果m=n的话就输出m printf("%d ", m); } return 0; } 一直想不明白这句是为什么 if(m == n) m==2 能勉强理解 m==3 为什么? 外循环m=3时 for(n=2; n<m; n++) 是不是就等价于for(n=2; n<3; n++) 这时候n=2后 内循环就应该停止了啊,怎么实现的n==3的?
外循环m=3时
for
(n=2; n<m; n++) 等价于
for
(n=2; n<3; n++)
这时候n++等于3时 不符合循环条件会跳出当前内循环。
但注意,此时n就是等于3了(n++自增导致的)
for循环的执行顺序是先n<m判断,执行语句,n++,再n<m判断,执行语句,n++
所以n=2(执行语句)后,n++等于3,n<m条件不符合,跳出当前内循环。
再执行 if
(m == n)
printf
(
"%d "
, m);
所以能输出素数3.
后面的数字同理。
故
if
(m == n)
printf
(
"%d "
, m);
是保证素数自身一定能被输出,前面内循环语句是找出数字的能被整除的情况,跳出循环后m == n又限制这个因数只能是自身。
综上,n<m和n<=m条件应该均可。
#include <stdio.h>
int main()
{
int m ;
for (m = 2; m <50; m++) //for(m=2;m<=50;m++)
{
;
}
printf("%d", m);
return 0;
}
我试了一下上边代码,输出的是50 //51
我是不是可以这样理解 :
for循环时 哪怕m<50==0 m++依然会运算一次!!