Python3求小于等于给定值的所有质数之和的函数实现及错误排查
sum_primes函数实现(计算小于等于输入值的所有质数总和)
原代码问题排查
你的代码存在三处核心逻辑错误:
- 判断逻辑写反:你用入参
num和循环变量i取余判断,实际需要判断的是当前遍历的i是否为质数,即判断i能否被小于它的正整数整除 - 返回位置错误:
return total缩进在第一层for循环内部,第一次循环结束就会直接返回结果,不会遍历完所有2到num的数值 - 跳出逻辑错误:
break触发条件设置错误,只要num能被某个i整除就直接终止整个循环,完全不符合质数求和的需求
正确代码实现
基础易读版(适合入门理解逻辑)
def sum_primes(num): total = 0 # 遍历所有2到num的待判断数值 for i in range(2, num + 1): is_prime = True # 判断i是否为质数:只需验证到i的平方根即可,可减少无效循环 for j in range(2, int(i ** 0.5) + 1): if i % j == 0: is_prime = False break if is_prime: total += i return total # 测试用例:小于等于11的质数为2、3、5、7、11,总和为28 print(sum_primes(11)) # 输出28
优化版(埃拉托斯特尼筛法,适合大数值计算场景)
def sum_primes(num): if num < 2: return 0 # 初始化筛子,默认所有数都为质数 is_prime = [True] * (num + 1) is_prime[0] = is_prime[1] = False for i in range(2, int(num ** 0.5) + 1): if is_prime[i]: # 将i的所有倍数标记为非质数 for j in range(i * i, num + 1, i): is_prime[j] = False # 汇总所有质数的和 return sum(idx for idx, val in enumerate(is_prime) if val) print(sum_primes(11)) # 输出28
内容的提问来源于stack exchange,提问作者HIRPA SILESHI
相关产品推荐
相关产品推荐

