You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于While循环求1-100间质数:嵌套循环逻辑疑问

理解质数程序中内层while循环的作用

嘿,首先必须给你点个赞!花几天时间把for循环版的质数程序改成while循环,这绝对是实打实的进步——能动手改写代码,本身就是啃透知识的关键一步👍

咱先从质数的核心定义说起:质数是大于1的自然数,除了1和它本身之外,没有其他能整除它的数。外层循环里的x,就是我们逐个检查的候选数(从2开始,一直到99,因为条件是x < 100)。那内层循环的y,说白了就是用来「找茬」的——它要帮我们验证:当前的x有没有除了1和自己之外的因数。

内层循环里y的具体作用

我拿两个例子给你拆解:

  1. 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是质数
  2. x=4(这不是质数):

    • 内层循环初始化y=2,进入while y < 4的循环
    • 检查4%2,结果是0(能整除!),这时候我们立刻知道4不是质数,直接跳出内层循环,不用再检查y=3
    • 这样还能节省不必要的计算,挺高效的

为啥要嵌套这个y的循环?

因为单独一个外层循环只能拿到要检查的数x,但我们没法直接判断x是不是质数——必须通过「试除」来验证。y就是那个用来试除的工具:它从2开始,遍历到x-1的所有数,只要有一个能整除xx就不是质数;如果遍历完都找不到,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

火山引擎 最新活动