Вопрос:

Как найти три последовательных совершенных числа?

python perfect-numbers

59 просмотра

1 ответ

1 Репутация автора

Меня попросили найти три последовательных совершенных числа (то есть числа, которые множители (включая 1 и исключая себя) суммируют, чтобы быть собой) после 6. Вот моя попытка:

# 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)

Пока я запускаю, ничего не появляется. Я знаю, что может быть действительно тривиальная ошибка, но я потратил целый день на ее поиск и ничего не получил. Пожалуйста помоги.

Автор: Alexis Источник Размещён: 30.01.2019 01:55

Ответы (1)


0 плюса

18047 Репутация автора

Хотя ваш код занимает всего 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)
Автор: cdlane Размещён: 01.02.2019 07:49
Вопросы из категории :
32x32