Пусть \(M\) — разность максимального и минимального простых натуральных делителей целого числа, не считая самого числа. Если таких делителей у числа нет, то значение \(M\) считается равным нулю. Напишите программу, которая перебирает целые числа, большие \(8~117~600~756,\) в порядке возрастания и ищет среди них такие, для которых \(M\) является простым числом и в своей записи содержит не менее четырёх цифр \(1.\)
В ответе запишите в первом столбце таблицы первые \(5\) найденных чисел в порядке возрастания, а во втором столбце — соответствующие им значения \(M.\)
Количество строк в таблице для ответа избыточно.
Решение:
Python
from math import isqrt
def is_prime(n):
if n <= 2:
return n == 2
for d in range(2, isqrt(n) + 1):
if n % d == 0:
return False
return True
def factor(n):
divs = []
for d in range(2, isqrt(n) + 1):
while n % d == 0:
divs.append(d)
n //= d
if n > 1:
divs.append(n)
return divs
N = 8_117_600_756
q = 0
while q < 5:
N += 1
divs = factor(N)
M = divs[-1] - divs[0]
if is_prime(M) and str(M).count('1') > 3:
print(N, M)
q += 1
Ответ:
\(8117601578 \,\, 1117817\)
\(8117603854 \,\, 11117\)
\(8117607130 \,\, 811760711\)
\(8117608904 \,\, 1014701111\)
\(8117611292 \,\, 111119\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене