如何正确修复质数判断函数?解决输入1返回True的错误问题
修复质数判断函数的问题
原函数的核心问题是未处理n ≤ 1的边界情况,根据质数定义(大于1的自然数,除了1和自身外无其他因数),这类数直接不属于质数范畴。同时原函数的循环逻辑可以优化,提升判断效率。
修复后的代码
def is_prime(n): # 小于等于1的数不是质数 if n <= 1: return False # 2是唯一的偶质数 if n == 2: return True # 除2外的偶数都不是质数 if n % 2 == 0: return False # 遍历从3到n平方根的奇数,无需检查更大的数 for i in range(3, int(n**0.5) + 1, 2): if n % i == 0: return False return True print(is_prime(1)) # 输出False
关键修复点说明
- 新增
n <= 1的判断:直接返回False,解决了输入1时返回错误结果的问题,同时覆盖了0、负数等无效输入场景。 - 单独处理n=2:避免进入后续循环,提升小数字的判断效率。
- 排除偶合数:提前过滤除2外的所有偶数,减少循环次数。
- 优化循环范围:只遍历到
int(n**0.5) + 1,因为若n存在大于其平方根的因数,对应的另一个因数必然小于平方根,无需重复检查;同时步长设为2,只遍历奇数,进一步提升效率。
内容的提问来源于stack exchange,提问作者Danxs
相关产品推荐
相关产品推荐

