Задача к ЕГЭ по информатике на тему «делители числа» №2

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [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
Оцените статью
Я решу все!