一个数除了本身之外的因数称为真因数(proper divisor)。例如,28的真因数是1、2、4、7和14。这些真因数的和恰好为28,因此我们称28是完全数(perfect number)。
有趣的是,220的真因数之和是284,同时284的真因数之和是220,构成了一个长度为2的链,我们也称之为亲和数对(amicable pair)。
有一些更长的序列并不太为人所知。例如,从12496出发,可以构成一个长度为5的链:
12496 → 14288 → 15472 → 14536 → 14264 (→ 12496 → …)
由于这条链最后又回到了起点,我们称之为亲和数链(amicable chain)。
找出所有元素都不超过一百万的亲和数链中最长的那条,并给出其中最小的那个数。
解:
先求一半因子,再补上另一半因子,可以提高效率。
# 求一半因子,包含1
def half_divisors(n<