质数统计程序调试:count_primes(100)返回值异常排查
质数统计程序错误排查
你的count_primes(100)返回50而非25,核心问题出在check_primes函数的逻辑错误,导致大量非质数被误判为质数。
具体错误点:
- 循环逻辑失效:
while n < numb循环仅执行一次就直接return。比如判断9时,n=2,9%2≠0,函数立刻返回True,但9能被3整除,不是质数。这个循环根本没完成所有必要的因数检查。 - 判断逻辑颠倒:质数判断的正确逻辑是:只要找到一个能整除目标数的因数,就判定为非质数(返回False);只有所有可能的因数都无法整除时,才判定为质数(返回True)。你的代码刚好相反,第一次遇到不能整除的数就返回True,完全不符合质数判定规则。
修正后的代码:
def check_primes(numb): # 小于等于1的数不是质数 if numb <= 1: return False # 2是唯一的偶质数 if numb == 2: return True # 偶数直接排除(除了2) if numb % 2 == 0: return False n = 3 # 只需检查到平方根,减少不必要的循环次数 while n * n <= numb: if numb % n == 0: return False n += 2 # 只检查奇数,提升效率 return True def count_primes(num): count = 0 for m in range(2, num): if check_primes(m): count += 1 return count
调用count_primes(100)会返回正确的25。
内容的提问来源于stack exchange,提问作者j p
相关产品推荐
相关产品推荐

