29. Совершенные числа.

(открыть в новой вкладке)

Условие:

Целое число n называется совершенным, если сумма всех его собственных делителей равна самому числу n. Например, 28 – это совершенное число, поскольку его собственными делителями являются 1, 2, 4, 7 и 14, а 1 + 2 + 4 + 7 + 14 = 28.
Напишите программу для определения того, является ли заданное число совершенным. Программа должна выводить совершенные числа в режиме реального времени (в цикле print).
Алгоритм с каждым последующим числом выполняет всё больше и больше операций. Ваш компьютер будет выполнять поиск совершенного числа больше 8128 бесконечно долго. Время выполнения алгоритма растёт с O(n!).
Кстати, следующее совершенное число равно 33_550_336.

Код:

while True:
    digit = input("%100s" % "Введите до какого числа будем искать совершенные числа (к примеру, 10000): ")
    try:
        digit = int(digit)
        break
    except:
        print("%99s" % "Вы ввели не число.")
print()

result_list = []
diapazon = range(1, digit + 1)
for i in diapazon:                                          # проверим каждую цифру на совершенство
    temp_list_of_denominators = []
    for i2 in range(1, i):                                  # будем искать делители у каждой цифры        
        if i % i2 == 0:
            temp_list_of_denominators.append(i2)
    if sum(temp_list_of_denominators) == i:
        result_list.append(i)
        print("%99s" % f"Добавлено число: {i}.")