关于is_prime函数判断9为素数返回True的问题求助
你的素数判断函数问题分析与修复
嘿,这问题我一眼就看出来啦~咱们先把你的代码贴出来,方便分析:
def is_prime(x): for i in range(2,x): if (x % i) == 0: return False else: return True print(is_prime(9))
问题出在哪?
你的else分支和return True写在循环内部的if语句同级了!也就是说,当第一次循环i=2时,9除以2余数是1(不等于0),这时候会直接执行else里的return True,函数直接结束,根本没机会检查后面的i=3(而9%3=0,这才是判断9不是素数的关键)。
简单说,函数只检查了第一个除数就提前返回了,完全没完成整个遍历过程。
修复后的代码
我们只需要把return True移到循环结束之后,这样只有当所有可能的除数都检查过,没有找到能整除x的数时,才返回True:
def is_prime(x): # 先处理特殊情况:小于2的数不是素数 if x <= 1: return False # 遍历到x的平方根就够了,提升效率 for i in range(2, int(x**0.5) + 1): if x % i == 0: return False # 循环结束都没找到除数,说明是素数 return True print(is_prime(9)) # 现在会输出False啦!
额外优化说明
我还加了两个小优化:
- 先判断x<=1的情况:因为小于等于1的数都不是素数,直接返回False,避免无效循环。
- 循环范围改成
range(2, int(x**0.5)+1):因为如果x有一个大于它平方根的因数,那对应的另一个因数肯定小于平方根,所以只需要检查到平方根就够了,能大幅提升大数字的判断效率。
内容的提问来源于stack exchange,提问作者MINO
相关产品推荐
相关产品推荐

