Напишите программу, которая перебирает целые числа, большие \(2~626~695~891,\) в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых ровно один раз содержит в своей записи \(67\) (\(67\) – идущие подряд друг за другом в указанном порядке цифры \(6\) и \(7\)).
В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце – для каждого из них соответствующий наименьший найденный множитель.
Количество строк в таблице для ответа избыточно.
Решение:
Python
from math import isqrt
def factor(n):
ans = []
for d in range(2, isqrt(n) + 1):
while n % d == 0:
ans.append(d)
n //= d
if len(ans) > 2:
return []
if n > 1:
ans.append(n)
return ans
q = 0
n = 2_626_695_891
while q < 5:
n += 1
divs = factor(n)
if len(divs) == 2 and all(str(x).count('67') == 1 for x in divs):
print(n, divs[0])
q += 1
Ответ:
\(2626696861 \,\, 6793\)
\(2626700987 \,\, 1567\)
\(2626704089 \,\, 167\)
\(2626711691 \,\, 2267\)
\(2626713493 \,\, 67\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене