Напишите программу, которая перебирает целые числа, большие \(1~103~285~717,\) в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых ровно один раз содержит в своей записи \(16\) \((16\) – идущие подряд друг за другом в указанном порядке цифры \(1\) и \(6).\)
В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце – для каждого из них соответствующий наименьший найденный множитель.
Количество строк в таблице для ответа избыточно.
Решение:
Python
from math import isqrt
def is_prime(n):
if n <= 2:
return n == 2
if n & 1 == 0:
return False
for i in range(3, isqrt(n) + 1, 2):
if n % i == 0:
return False
return True
primes = [x for x in range(2, isqrt(1_200_000_000)+1) if is_prime(x)]
q = 0
n = 1_103_285_717
while q < 5:
n += 2
for d in primes:
if n % d == 0:
d1 = n // d
if is_prime(d1) and str(d).count('16') == 1 and str(d1).count('16') == 1:
print(n, d)
q += 1
Ответ:
\(1103299319 \,\, 1693\)
\(1103309477 \,\, 1693\)
\(1103322107 \,\, 16187\)
\(1103323021 \,\, 1693\)
\(1103328547 \,\, 3169\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене