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

C语言生成指定范围质数时误输出1的问题求助

解决质数判断中误将1识别为质数的问题

你的问题出在prime函数对数字1的处理逻辑上:当输入number=1时,循环for (j = 2; j <= number - 1; j++)的判断条件2 <= 0不成立,循环直接跳过,执行return number;。而在C语言的bool类型规则里,非0值都会被视为true,所以return 1等价于返回true,导致1被错误判定为质数。

修改方案

直接在prime函数开头添加特殊值判断,将小于2的数(包括1、0及负数)直接判定为非质数,同时可以优化循环逻辑提升效率:

bool prime(int number)
{
    // 小于2的数都不是质数
    if (number < 2)
    {
        return false;
    }
    int j;
    // 循环到number的平方根即可,无需遍历到number-1
    for (j = 2; j * j <= number; j++)
    {
        if (number % j == 0)
        {
            return false;
        }
    }
    return true;
}

说明

  1. 特殊值处理:通过if (number < 2)直接排除1、0和负数,符合质数的定义(质数是大于1的自然数,且只能被1和自身整除)。
  2. 循环优化:将循环条件改为j * j <= number,因为如果一个数n存在大于其平方根的因数,那么必然存在一个对应的小于平方根的因数,这样可以大幅减少循环次数,提升判断效率。

修改后再输入最小值1、最大值100,输出就只会包含100以内的所有质数,不会出现1了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:45:58