Задача к ЕГЭ по информатике на тему «делители числа» №7

Найдите все натуральные числа, принадлежащие отрезку [11 111 111; 77 777 777], у которых ровно 5  различных делителей. В ответе укажите количество данных чисел.

По основной теореме арифметики (ОТА) каждое натуральное число, большее 1, можно разложить на простые множители. То есть некоторое натуральное число x  можно разложить в следующий вид:

x = p1q1 ⋅p2q2 ⋅...⋅pnqn

Здесь pi,i ∈ [1;n]  – некоторое простое число, а qi,i ∈ [1;n]  – натуральный показатель степени. В таком случае число обязательно имеет (q1 + 1)⋅(q2 + 1)⋅...⋅(qn + 1)  делителей (каждое простое число можно брать от 0 до qi  раз, где i ∈ [1;n]  ).

В данной задаче необходимо, чтобы у числа было ровно 5 различных делителей.

Тогда произведение всех qi  должно быть равно 5. Так как число 5 – простое, то только 1 множитель должен быть равен 5. Отсюда некоторое q = 4 i  .

Тогда число имеет вид  4 p  где p  – любое простое число.

Таким образом, нужно будет перебрать простые числа так, чтобы получить все возможные числа вида p4  из отрезка [11111111;77777777]  .

def is_prime(n):  # Функция проверки на простое число
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:  # Если нашли нетривиальный делитель
            return False  # То число не простое, возвращаем False
    return n > 1  # Если число равно 1, то оно непростое, и будет возвращено False, а иначе True


# Нужно перебрать все числа вида x = p**4, где p - простое число
count = 0  # Количество подходящих чисел

# Находим максимально возможное p для отрезка
p_max = int(77_777_777 ** (1 / 4))

# Перебираем простые числа от 2 до максимально возможного
for p in range(2, p_max + 1):
    if is_prime(p):  # Если число p - простое
        # То проверяем, что итоговое число будет принадлежать отрезку
        if 11_111_111 <= p ** 4 <= 77_777_777:
            count += 1

print(count)  # Выводим ответ

Ответ: 8
Оцените статью
Я решу все!