Напишите программу, которая перебирает целые числа, большие \(3~000~000,\) в порядке возрастания и ищет среди них числа, представимые в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи либо цифру \(1,\) либо цифру \(3.\) В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце — для каждого числа наибольший из соответствующих им найденных множителей. Количество строк в таблице избыточно.
Решение:
Python
def is_prime(n):
if n == 1:
return False
for x in range(2, int(n**0.5)+1):
if n % x == 0:
return False
return True
q, n = 0, 3_000_000
while q < 5:
n += 1
for x in range(2, int(n**0.5) + 1):
if n % x == 0:
if is_prime(x) and any(z in str(x) for z in '13'):
m = n // x
if is_prime(m) and any(z in str(m) for z in '13'):
q += 1
print(n, m)
break
Ответ:
\(3000001 \,\, 3517\)
\(3000009 \,\, 1000003\)
\(3000013 \,\, 3881\)
\(3000023 \,\, 230771\)
\(3000031 \,\, 22901\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене