Как сделать так, чтобы мой код давал правильный ответ
Не изобильные суммы (проект Эйлера)
Задача 23
Совершенное число-это число, для которого сумма его собственных делителей точно равна этому числу. Например, сумма собственных делителей 28 будет равна 1 + 2 + 4 + 7 + 14 = 28, а это значит, что 28-идеальное число.
Число n называется недостаточным, если сумма его собственных делителей меньше n, и оно называется изобильным, если эта сумма превышает n.
Поскольку 12-это наименьшее обильное число, 1 + 2 + 3 + 4 + 6 = 16, наименьшее число, которое может быть записано как сумма двух обильных чисел, равно 24. С помощью математического анализа можно показать, что все целые числа больше 28123 могут быть записаны как сумма двух обильных чисел. Однако этот верхний предел не может быть уменьшен дальнейшим анализом, даже если известно, что наибольшее число, которое не может быть выражено как сумма двух обильных чисел, меньше этого предела.
Найдите сумму всех положительных целых чисел, которые не могут быть записаны как сумма двух обильных чисел.
Я только начал учиться программировать несколько дней назад, и я застрял на некоторое время с этим. Я действительно не знаю, что я делаю не так, может быть, я не понимаю вопроса, или я не уверен. Не могли бы вы помочь мне заставить его работать? и если вы знаете, как его оптимизировать, было бы здорово, если бы вы могли рассказать мне об этом. Спасибо!
Что я уже пробовал:
import time start = time.time() lst = [] for i in range(1,28124): b = 0 for n in range(1, int(i**.5 + 1)): if i % n == 0: if n == int(i / n) or n == 1: b += n else: b += n + int(i / n) if b > i: lst.append(i) break lst2 = list(range(1,28124)) lst3 = [] for i in lst: for n in lst: if n > i: break c = i + n if c > 28123: break if c in lst3: break lst3.append(c) lst2.remove(c) sum1 = 0 for i in lst2: sum1 += i print(sum1) end = time.time() print(end - start)