#include "stdio.h"
int main()
{
int m,k,i,n;
scanf("%d",&n);
for(m=2;m<=n;m++)
{
k=m-1;
for(i=2;i<=k;i++)
{
if(m%i==0) break;
}
if(i==m)
{
printf("%d\n",m);
}
}
}
逻辑上有点问题, m=2 k = m - 1 = 1, i=2 i <= k 也就是i<=1 不成立就进不去for(i=2;i<=k;i++) 循环 也就可以得到 i= m = 2
举个简单的例子,假设输入3
(1)第一层循环 m=2,进去k=1,第二层循环i是从2开始,又i<=k,进不去第二层循环,此时if(i==m)成立,输出2
(2)第一层 第2次 循环 m=3,进去k=2,第二层循环i是从2开始,进第二层循环,if(m%i==0)不成立,i++,i=3,第二层循环结束,此时if(i==m)成立,输出3
第一个for循环改成那个i<=m可以吗
改成m就不会输出啦
解释一下呗