#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 MATLAB运行显示错误,如何解决?
- ¥15 c++头文件不能识别CDialog
- ¥15 Excel发现不可读取的内容
- ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
- ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
- ¥20 yolov5自定义Prune报错,如何解决?
- ¥15 电磁场的matlab仿真
- ¥15 mars2d在vue3中的引入问题
- ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
- ¥15 算法题:数的划分,用记忆化DFS做WA求调