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 ans = 0 # Счётчик для ответа # Нужно перебрать все числа вида x = 5 * p**4, где p - простое число l = 12345678 # Левая граница отрезка # Делим на 5, а затем извлекаем корень 4 степени, # чтобы получить первое возможное p l = int((l / 5) ** (1 / 4)) # Аналогично с правой границей отрезка r = 87654321 r = int((r / 5) ** (1 / 4)) # Перебираем числа от l до r включительно for p in range(l, r + 1): if is_prime(p): # Если число p - простое # Проверяем, что итоговое число будет принадлежать отрезку if 12345678 <= 5 * p ** 4 <= 87654321: ans += 1 print(ans)
Специальные программы

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

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

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

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

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

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