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

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

Задача 1#61487

Найдите все натуральные числа, принадлежащие отрезку [33  333  333  ; 333  333  333  ], у которых ровно 7  различных четных делителей. В ответе укажите количество данных чисел.

Показать ответ и решение

Если число имеет разложение вида     a   a
2a ⋅p11⋅p22⋅ ... ⋅pann  , то количество чётных делителей такого числа равно a ⋅(a1 + 1)⋅(a2 + 1)⋅ ... ⋅(an + 1)  (выбрали степень двойки от 1  до a  , степень каждого простого от 0  до ai  ). По условию это равно 7  — простое число, как произведение натуральных чисел его можно представить как 7  или 1 ⋅7  .

Случай 1  : a = 7  , все ai = 0 → число равно 27 = 128  , не подходит.

Случай 2  : a = 1  , какое-то ai = 6  , все остальные ai = 0  — приходим к разложению вида 2 ⋅p6  .

 

На частном случае решение будет выглядеть так:

С помощью стандартной программы найдем подходящие нам числа до 100  000  для того, чтобы рассмотреть их:

def dividers(n):
    k = 0
    for i in range(1, int(n ** 0.5) + 1):
        if n % i == 0:
            if i % 2 == 0:
                k += 1
            if (n // i) % 2 == 0 and n // i != i:
                k += 1
    return k

for i in range(1, 100000):
    if dividers(i) == 7:
        print(i)

Подходящие нам числа в диапазоне до 100  000  - это 128  , 1458  и 31250  . Хочется разложить эти числа:

128 = 27 = 2⋅26

1458 = 2 ⋅36

31250 = 2 ⋅56

Заметим, что все числа раскладываются на    6
2⋅p  , где p  - простое число.

 

Воспользуемся выведенной формулой для решения:

def prime(x):
    for i in range(2, int(x**0.5)+1):
        if x % i == 0:
            return False
    return True

ans = 0
for i in range(int((33333333 // 2)**(1/6)), int((333333333 // 2)**(1/6)) + 1):
    if prime(i):
        if 33333333 <= 2*(i**6) <= 333333333:
            ans += 1
print(ans)

Ответ: 3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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