Задание 25. Информатика. ЕГЭ. Поляков-2589

Просмотры: 137
Изменено: 24 ноября 2024

(Д.Ф. Муфаззалов) Два числа называются дружественными если сумма собственных делителей (то есть всех положительных делителей, отличных от самого́ числа) любого их них равна другому числу. Например, числа \(220\) и \(284\) дружественные. Выведите в порядке возрастания числа в диапазоне \( [2; \,\, 30000]\), имеющие дружественное число, большее чем само это число, и через пробел это дружественное число. Каждое следующие число из указанного диапазона выводите на новой строке.

Решение:

Python


def divisors(n):
    d = set()
    d.add(1)
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            d.add(x)
            d.add(n // x)
    return d

for x in range(2, 30001):
    sum_div = sum(divisors(x))
    if sum_div > x and x == sum(divisors(sum_div)):
        print(x, sum_div)

Ответ:
\( 220 \,\, 284\)
\( 1184 \,\, 1210\)
\( 2620 \,\, 2924\)
\( 5020 \,\, 5564\)
\( 6232 \,\, 6368\)
\( 10744 \,\, 10856\)
\( 12285 \,\, 14595\)
\( 17296 \,\, 18416\)