LHC18 2013-10-28 10:25 采纳率: 0%
浏览 1764

求解释啊~~~ 又不明白了。。

#include #include main() { int a,b,c; c=0; for(a=100;a<=200;a++) { for(b=2;b<=a-1;b++) if(a%b==0) break; if(a==b) printf("素数为:%d\n",a); c++; } system("pause"); } break的意思不是跳出循环进行下一步吗? 这样的话输出的岂不都是合数了? 还有那个 if(a==b)需要吗? 既然b<=a-1了,怎么会等于呢? 但是取消了输出的又不对,搞不懂了~ 求解答~~

  • 写回答

2条回答

  • Captain_Permission 2013-10-28 11:16
    关注

    外面的循环是表示你要查询是否是素数的范围是100到200,内层循环表示你在逐个试除以验证当前查询的数a是否存在非1的约数,分析代码可以知道,程序跳出内层循环的条件有两个,第一种就是你检测到这个数有非1约数,那么表示这个数不是素数,这时候触发break跳出循环,第二种就是你内层循环所有的可能都试过了,说明这个数没有非1约数,因此它是素数。那么既然不管它是否是素数,都会跳出循环,所以就需要加以判断。容易看出,两者虽然都会跳出内层循环,但是两种情况中a和b的大小关系是不一样的,因为第一种情况是在中途跳出的,因此b必然还小于a,第二种情况是在所有情况都试过之后跳出,因此必然a等于b(因为当b==a-1时候,发现还是不能整除,因此在进入下一次循环之前b++,这个时候b==a,然后再下一次循环开始前在执行判断语句是否b<=a-1,显然不符合,所以跳出,此时b保持等于a的状态),因此就可以根据退出内层循环后a和b的大小关系来判断a是否是素数。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog