25.01 Делители числа
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа, у
которых есть ровно
делителей, которые оканчиваются на
или
. Общее количество делителей числа может быть
любым. В ответ запишите все найденные числа через пробел в порядке возрастания.
По основной теореме арифметики (ОТА) каждое натуральное число, большее 1, можно разложить на простые множители.
То есть некоторое натуральное число можно разложить в следующий вид:
Здесь – некоторое простое число, а
– натуральный показатель степени. В таком случае число
обязательно имеет
делителей (каждое простое число можно брать от 0 до
раз, где
).
В данной задаче необходимо, чтобы у числа было ровно 5 делителей, которые оканчиваются на 0 или 5. Тогда эти делители должны быть кратны числу 5, а значит в разложении числа должно участвовать простое число 5.
Пусть число имеет следующий вид:
В таком случае количество делителей, кратных 5, будет равно обозначим
произведение всех
за
. Так как количество по условию должно быть равно 5, то либо
и
, либо
и
. Для
аналогично будет только 1 множитель, а значит только 1 простое число в степени с показателем 4. В
общем случае это можно представить, как
где
– любое простое число (в том числе 5, что обобщает эти два
случая).
Таким образом, нужно будет перебрать простые числа так, чтобы получить все возможные числа вида из отрезка
.
def is_prime(n): # Функция проверки, является ли число простым if n == 1: # Единицу нужно проверить отдельно return False # 1 - не простое число, возвращаем False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: # Если нашли нетривиальный делитель return False # То число не простое, возвращаем False return True # Нужно перебрать все числа вида x = 5 * p**4, где p - простое число l = 28916485 # Левая граница отрезка # Делим на 5, а затем извлекаем корень 4 степени, # чтобы получить первое возможное p l = int((l / 5) ** (1 / 4)) # Аналогично с правой границей отрезка r = 49716586 r = int((r / 5) ** (1 / 4)) # Перебираем числа от l до r включительно ans = [] # Список чисел для ответа for p in range(l, r + 1): if is_prime(p): # Если число p - простое # Проверяем, что итоговое число будет принадлежать отрезку if 28916485 <= 5 * p ** 4 <= 49716586: ans.append(5 * p ** 4) print(*ans) # Выводим элементы списка через пробел
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

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

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

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

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

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!