基于While循环求1-100间质数:嵌套循环逻辑疑问
理解质数程序中内层while循环的作用
嘿,首先必须给你点个赞!花几天时间把for循环版的质数程序改成while循环,这绝对是实打实的进步——能动手改写代码,本身就是啃透知识的关键一步👍
咱先从质数的核心定义说起:质数是大于1的自然数,除了1和它本身之外,没有其他能整除它的数。外层循环里的x,就是我们逐个检查的候选数(从2开始,一直到99,因为条件是x < 100)。那内层循环的y,说白了就是用来「找茬」的——它要帮我们验证:当前的x有没有除了1和自己之外的因数。
内层循环里y的具体作用
我拿两个例子给你拆解:
当
x=5(这是个质数):- 内层循环初始化
y=2,进入while y < x(也就是y < 5)的循环 - 先检查
5%2,结果是1(不能整除),y加1变成3 - 再检查
5%3,结果是2(还是不能整除),y加1变成4 - 接着检查
5%4,结果是1(依旧不能整除),y加1变成5,这时候y < x的条件不成立,内层循环结束 - 全程没找到能整除5的
y,所以判定5是质数
- 内层循环初始化
当
x=4(这不是质数):- 内层循环初始化
y=2,进入while y < 4的循环 - 检查
4%2,结果是0(能整除!),这时候我们立刻知道4不是质数,直接跳出内层循环,不用再检查y=3了 - 这样还能节省不必要的计算,挺高效的
- 内层循环初始化
为啥要嵌套这个y的循环?
因为单独一个外层循环只能拿到要检查的数x,但我们没法直接判断x是不是质数——必须通过「试除」来验证。y就是那个用来试除的工具:它从2开始,遍历到x-1的所有数,只要有一个能整除x,x就不是质数;如果遍历完都找不到,x就是质数。
其实你原来的for循环版本,本质和这个while循环是一样的——for循环里的for y in range(2, x),换成while就是y=2; while y < x: ... y +=1,核心逻辑都是用y来遍历可能的因数。
给你提个小优化(可选)
其实y不用遍历到x-1,遍历到x的平方根就够了——因为如果x有一个大于平方根的因数,那必然对应一个小于平方根的因数,这样能减少循环次数,让程序更快。比如检查x=25,平方根是5,y遍历到5就够了,不用到24~
内容的提问来源于stack exchange,提问作者FacePalmProgramming




