作者的标准答案中用除数(m)去除于被除数(n),但在子循环中逻辑式中式要求n<m,为什么还会有后面的n=m,并且还输出了?还有如果按这个公式算的话4/4余0,4=4,为什么4没有输出以及6除于6,8除于8........,
因为不可能出现你说的这种情况,外层循环当m=4的时候,到子循环n是从2开始遍历2到4之间的数
暴力从2一直遍历到自身 如果能取模为0(至少含有2这个因子 ) 说明不是素数 跳出遍历 继续判定下一个数 暴力遍历
#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;
}
首先说明一下什么是素数,素数就是只能被1和它本身整除的数,搞清楚后就开始讲这个程序是怎么一步一步来的;
第一次:最外头的for循环给的m的初始值为2,即m=2,然后就开始内部的for循环了,即n=2,m%n(2%2==0),所以就输出m了,即2是素数;第二次最外头的for循环m=3,而内for循环的n的值就回到n=2了,而不是n=3,就会变成3%2!=0,然后n自增变成n=3了,就变成3%3==0,所以3是素数;第三次最外头的for循环m=4,内for循环n=2,然后4%2==0,但4与2不相等,所以4不是素数,后面以此类推,我第一次讲,希望我讲清楚了
请输入你的代码,查看后解答