先引入问题:
两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。
输入格式:无
输出格式:3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号),一对亲密数只输出一次, 小的在前
这是在网站上的一段python题解:
for i in range(1,3000):
s=k=0
# 计算 i 的真因数和
for j in range(1,i):
if i % j == 0:
s += j
# 计算 s 的真因数和
for x in range(1, s):
if s % x == 0:
k += x
# 判断是否构成一组亲密数
if i == k and i < s:
# 输出亲密数
print("({:d},{:d})".format(i, s), end="")
我无法理解这段代码的原因是:为什么计算s的真因数和,s不是i的真因数和吗,两者有什么关系?为什么可以这样计算,而不是在3000以内寻找真因数和是i的数?