Пусть М - разность максимального и минимального простых натуральных делителей целого числа, не считая самого числа.
Если таких делителей у числа нет, то значение М считается равным нулю.
Напишите программу, которая перебирает целые числа, большие 8 117 600 756, в порядке возрастания и ищет среди них такие, для которых М является простым числом и в своей записи содержит не менее четырёх цифр 1.
В ответе запишите в первом столбце таблицы первые 5 найденных чисел в порядке возрастания, а во втором столбце - соответствующие им значения М.
Количество строк в таблице для ответа избыточно.
Решение
🔹 Шаг 1. Проверка простоты числа
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
📌 Создаём функцию, которая проверяет, является ли число простым.
🔹 Шаг 2. Разложение на простые множители
def prime_factors(x):
for i in range(2, int(x**0.5) + 1):
if x % i == 0:
return [i] + prime_factors(x // i)
return [x]
📌 Пишем функцию разложения числа на простые множители.
🔹 Шаг 3. Перебор чисел и вычисление M
c = 0
for x in range(8_117_600_757, 10**10):
factors = prime_factors(x)
if len(factors) <= 1:
continue
M = max(factors) - min(factors)
if is_prime(M) and str(M).count('1') >= 4:
📌 Перебираем числа больше 8 117 600 756, считаем M как разность максимального и минимального простого делителя и проверяем, что M простое и содержит не менее 4 цифр 1.
🔹 Шаг 4. Вывод ответа
print(x, M)
c += 1
if c == 5:
break
📌 Выводим подходящие пары число–M и останавливаемся после 5 ответов.