如何找到三个连续的完美数字?

时间:2019-01-30 13:55:34

标签: python perfect-numbers

要求我在6之后找到三个连续的完美数(即因数(包括1和不包括其自身在内)总计为自身的数)。 这是我的尝试:

# Find three consecutive perfect numbers after 6
def f(x):
    "Find the sum of all factors."
    factors = []
    for i in range (1,x-1):
        if x%i == 0:
            factors.append (i)
        else:
            pass
    return sum(factors)

counts = 0
perfect_numbers = []
x = 6
while counts <= 2:
    x += 1
    if x == f(x):
        perfect_numbers.append (x)
        counts += 1
    else:
        pass
print(perfect_numbers)

运行时,什么都没有显示。 我知道可能有一个非常琐碎的错误,但是我花了一整天时间寻找它,却一无所获。请帮忙。

1 个答案:

答案 0 :(得分:0)

尽管您的代码在我的计算机上只需要3秒钟即可计算出所需的结果,但我们可以通过改进以下代码来将时间缩短一半:

for i in range (1,x-1):

x之后,我们不计算的第二高因子是x / 2,因为2是在1之后的第二最小因子。这让我们重写上面为:

for i in range(1, x // 2 + 1):

此外,如果以后要在其他程序中重用此代码,则使用range(1, x - 1)会使f(2)不正确。针对上述代码和一些样式问题对代码进行了重做:

# Find three consecutive perfect numbers after 6

def f(x):
    "Find the sum of all factors."

    factors = []

    for i in range(1, x // 2 + 1):
        if x % i == 0:
            factors.append(i)

    return sum(factors)

count = 0
number = 6
perfect_numbers = []

while count < 3:
    number += 1

    if number == f(number):
        perfect_numbers.append(number)
        count += 1

print(perfect_numbers)