#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 关于#hadoop#的问题
- ¥15 (标签-Python|关键词-socket)
- ¥15 keil里为什么main.c定义的函数在it.c调用不了
- ¥50 切换TabTip键盘的输入法
- ¥15 可否在不同线程中调用封装数据库操作的类
- ¥15 微带串馈天线阵列每个阵元宽度计算
- ¥15 keil的map文件中Image component sizes各项意思
- ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
- ¥15 划分vlan后,链路不通了?
- ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据