You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C++质数判断代码中while循环与sqrt函数的疑问

质数判断代码中while循环的作用解释

先还原《C++ Without Fear(第三版)》里这类质数判断的典型代码结构(你遇到的应该是类似版本):

bool is_prime(int n) {
    if (n <= 1)
        return false;
    int i = 2;
    while (i * i <= n) {
        if (n % i == 0)
            return false;
        i++;
    }
    return true;
}

为什么必须用while循环,而非单个if?

  • 质数的核心定义是:大于1的自然数,除了1和自身之外没有任何其他正因数。要确认n是质数,必须检查所有2到√n之间的整数——只要有一个数能整除n,它就不是质数。
  • 单个if语句只能检查某一个固定的i(比如只检查i=2),这完全不够。举个例子:判断n=9时,单个if检查i=2会得到9%2≠0,错误认为9是质数,但实际上9能被3整除,是合数。
  • while循环的作用就是遍历所有可能的除数i:从2开始,每次递增1,直到i的平方超过n(这里的优化逻辑是:如果n有一个大于√n的因数,那对应的另一个因数必然小于√n,所以检查到√n就足够覆盖所有可能的因数)。
  • 循环里的if是做单次检查:每拿到一个i,就判断n能否被它整除。如果能,直接返回false(确认不是质数);如果不能,就i++继续检查下一个数。当整个循环跑完都没找到能整除n的i,就说明n符合质数定义,返回true。

实际运行示例(n=17):

  • i=2,i*i=4<=17,17%2=1≠0 → i=3
  • i=3,i*i=9<=17,17%3=2≠0 → i=4
  • i=4,i*i=16<=17,17%4=1≠0 → i=5
  • i=5,i*i=25>17 → 循环结束,返回true,正确判断17是质数。

内容的提问来源于stack exchange,提问作者DamianZ98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:42:33