本质上是求质因数分解之和。
def breakdown(n):
if n == 1: # 处理n=1的边界情况
return []
factor = []
# 处理因数2(单独处理偶数,减少后续循环次数)
while n % 2 == 0:
factor.append(2)
n = n // 2
# 处理奇数因数,每次除尽当前因数,且i只遍历奇数
i = 3
while i * i <= n:
while n % i == 0: # 循环除尽当前因数,避免重复检查
factor.append(i)
n = n // i
i += 2 # 跳过偶数,减少一半循环次数
# 剩余的大于2的质因数
if n > 1:
factor.append(n)
return factor
n = int(input())
print(sum(breakdown(n)))

京公网安备 11010502036488号