Python质数函数问题:is_prime(975)误判、n=2返回None的解决方法
问题分析与修复
原代码的核心错误
- 错误的提前返回:循环中只要第一次
n % i != 0就返回True,导致仅检查了第一个因数(比如975和2取余不为0,直接返回True,完全没验证3、5等实际能整除它的数)。 - 边界情况未处理:当
n=2时,range(2,2)是空序列,循环不执行,函数没有执行任何返回语句,默认返回None。
修复后的代码
def is_prime(n): # 小于2的数不是质数 if n < 2: return False # 2是唯一的偶质数 if n == 2: return True # 大于2的偶数直接排除 if n % 2 == 0: return False # 只检查奇数因数,到n的平方根即可(优化性能) for i in range(3, int(n**0.5) + 1, 2): if n % i == 0: return False # 所有可能因数检查完毕,无整除则为质数 return True print(is_prime(975)) # 输出False print(is_prime(2)) # 输出True
修复说明
- 先处理边界值:直接判断小于2的数、等于2的数、大于2的偶数,快速返回结果,避免无效循环。
- 循环优化:只检查奇数因数,且仅需验证到
n的平方根(若n存在大于平方根的因数,必然对应一个更小的因数),提升运行效率。 - 修正返回逻辑:只有当所有可能的因数都检查完毕且未找到整除项时,才返回
True,彻底避免提前返回错误结果。
内容的提问来源于stack exchange,提问作者Foxee Saga
相关产品推荐
相关产品推荐

