所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
# 读取输入的 m 和 n
m, n = map(int, input().split())
# 标记是否找到完数
found = False
# 遍历 m 到 n 之间的所有数
for num in range(m, n + 1):
# 存储因子的列表
factors = []
# 计算除自身外的因子之和
factor_sum = 0
# 只需要遍历到平方根
for i in range(1, int(num**0.5) + 1):
if num % i == 0:
factors.append(i)
factor_sum += i
# 如果 i 不是 num 的平方根,添加另一个因子
if i != num // i and num // i != num:
factors.append(num // i)
factor_sum += num // i
# 判断是否为完数
if factor_sum == num:
found = True
# 对因子列表进行排序
factors.sort()
# 输出完数的因子累加形式的分解式
factor_str = " + ".join(map(str, factors))
print(f"{num} = {factor_str}")
# 如果没有找到完数,输出 None
if not found:
print("None")