如何补全Python脚本以计算n的所有真约数之和?
实现sum_divisors函数计算非自身约数之和
你的错误代码问题分析
- 每次找到约数时都把
sum重置为0,导致无法累加约数和 return sum放在了循环内部,第一次循环就直接返回结果,无法遍历所有可能的约数- 未处理
n=0的特殊情况 - Python 3中没有
xrange,应使用range
正确实现代码
def sum_divisors(n): if n <= 0: return 0 total = 0 # 遍历1到n的一半(包含),因为最大的非自身约数不会超过n/2 for i in range(1, n // 2 + 1): if n % i == 0: total += i return total # 测试用例验证 print(sum_divisors(0)) # 输出0 print(sum_divisors(3)) # 输出1 print(sum_divisors(36)) # 输出55 print(sum_divisors(102)) # 输出114
代码解释
- 特殊情况处理:当
n为0或负数时,直接返回0,符合题目要求 - 初始化累加变量:用
total(避免和内置函数sum重名)存储约数和,初始值为0 - 遍历约数范围:从1遍历到
n//2 + 1,确保不会遗漏所有可能的非自身约数 - 判断并累加约数:如果
i是n的约数(即n % i == 0),就将i加到total中 - 返回结果:遍历完成后返回累加的总和
内容的提问来源于stack exchange,提问作者Noah Wright
相关产品推荐
相关产品推荐

