Тема 25. Обработка целочисленной информации
25.01 Делители числа
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#88274

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [100; 100000], пары дружественных чисел. В ответ укажите количество таких пар и через пробел минимальную чётную сумму такой пары. Дружественные числа — это два различных натуральных числа, для которых сумма всех собственных делителей (исключая в качестве делителя само число) первого числа равна второму числу и наоборот, сумма всех собственных делителей (исключая в качестве делителя само число) второго числа равна первому числу. Пример, числа 220 и 284. У числа 220 делителями являются числа: 1,2,5,10,11,20,22,44,55,110 их сумма равна 284. У числа 284 делителями являются числа: 1,2,4,71,142 их сумма равна 220.

Показать ответ и решение
def divs(x):#функция поиска делителей определенного числа
    d = {1}#изначально включаем единицу
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
L = 100#левая граница отрезка
M = 100001#правая граница отрезка
d = {x:sum(divs(x)) for x in range(L,M)}
#словарь, в котором в качестве ключа будет число из промежутка,
# а в качестве значения будет сумма делителей (за исключением самого числа) данного числа
# для оптимизации в словаре мы будем оставлять только те числа,
# чья сумма делителей находится в пределах нашего отрезка
count = []
mn = 10**20
for key in d.keys():#проходимся по всевозможным числам из отрезка
    if key == d.get(d[key]) and d[key] != key:#если первое число равно сумме делителей второго числа,
        #и при этом сумма делителей первого числа не равна первому числу
        if sorted([key,d[key]]) not in count:#тогда проверяем,
        #что если ранее такая пара чисел не была в списке
            #P.S. d[key] - значение суммы делителей числа key это не только сумма делителей,
            # но и также второе число пары дружественных чисел
            count.append([key,d[key]])#то добавляем
print(len(count),min(sum(x) for x in count if sum(x) % 2 == 0))
#вывод количества таких пар и минимальной чётной суммы таких пар

Ответ: 13 504

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное обучение
в Школково

Для детей ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Брянской областей, а также школьникам, находящимся в пунктах временного размещения Крыма обучение на платформе бесплатное.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ или олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!