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; }
说明
- 特殊值处理:通过
if (number < 2)直接排除1、0和负数,符合质数的定义(质数是大于1的自然数,且只能被1和自身整除)。 - 循环优化:将循环条件改为
j * j <= number,因为如果一个数n存在大于其平方根的因数,那么必然存在一个对应的小于平方根的因数,这样可以大幅减少循环次数,提升判断效率。
修改后再输入最小值1、最大值100,输出就只会包含100以内的所有质数,不会出现1了。
内容的提问来源于stack exchange,提问作者Andressa
相关产品推荐
相关产品推荐

