Напишите программу, которая перебирает целые числа, большие \(1~104~285~717,\) в порядке возрастания и ищет среди них числа, представляющие собой произведение двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну комбинацию цифр \(16.\)
В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце - для каждого из них соответствующий наименьший из найденных множителей.
Количество строк в таблице для ответа избыточно.
Решение:
Python
from math import isqrt
def is_prime(n):
if n == 2:
return True
if n & 1 == 0:
return False
for d in range(3, isqrt(n) + 1):
if n % d == 0:
return False
return True
a = []
for n in range(17, isqrt(1_104_500_717) + 1, 2):
if str(n).count('16') == 1 and is_prime(n):
a.append(n)
q = 0
n = 1_104_285_717
while q < 5:
n += 1
for d in a:
if n % d == 0:
d1 = n // d
if str(d1).count('16') == 1 and is_prime(d1):
print(n, d)
q += 1
Ответ:
\(1104293251 \,\, 16691\)
\(1104315547 \,\, 1669\)
\(1104332237 \,\, 1669\)
\(1104342251 \,\, 1669\)
\(1104352547 \,\, 163\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене