Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [8077; 331323] cуперсовершенные числа. В ответ укажите количество таких чисел и через пробел сумму таких чисел. Суперсовершенные числа — это числа, чья сумма делителей числа суммы делителей самого числа вдвое больше изначального числа. Примеры: число 16 — его сумма делителей равна 31, сумма делителей числа 31 равна 32 — число 32 в два раза больше числа 16; число 4 — его сумма делителей равна 7, сумма делителей числа 7 равна 8 — число 8 в два раза больше числа 4.
def divs(x): # функция, которая возвращает отсортированный список делителей числа
d = set() # Множество для хранения делителей
for i in range(1,int(x**0.5)+1):
if x % i == 0:
d |= {i,x//i} # Добавляем делитель и парный ему в множеств
return sorted(d) # Возвращаем отсортированный список делителей числа x
ans = []
for x in range(8077,331323+1):
d = sum(divs(x)) # сумма делителей исходного числа
if sum(divs(d)) / 2 == x: # если сумма делителей числа суммы делителей исходного числа вдвое больше исходного числа
ans += [x]
print(len(ans),sum(ans))
Ответ: 2 327680