#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)
printf("%d ", m);
}
return 0;
}
我在这里把n<m改成了n<=m,那么m=4,n=4时,m%n=0且m==n,为啥不会输出4?
因为在 m=4时 第四次开始内循环,所以还是从 n=2开始的,每次内循环开始时n都会被初始化为2,所以 4%2==0 符合 if( m%n==0 ) break;
结论就是:第二层循环不会执行到n=4才跳出循环,会提前跳出循环,因为4能被2整除。
m=1时 n=2内循环结束
m=2时 n=2内循环执行一次
m=3时 n=2内循环执行两次 2,3
m=4时 n=2内循环执行三次2,3,4 ,但是因为m%n==0 所以实际执行了1次
m=5时 n=2内循环执行了四次 2,3,4,5
因为当当m=4,n=2时,m%n==0,这时已经跳出循环,接着进行m==n的判断,只有符合条件才会输出。这时m=4,n=2,明显不相等,所以不会输出4