Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
Например, маске \(123{*}4?5\) соответствуют числа \(123405\) и \(12300425.\)
Найдите все натуральные числа, принадлежащие интервалу \([2 \cdot 10^8; \, 3 \cdot 10^8],\) которые соответствуют маске \(?{*}37{*}21\) и имеют ровно три натуральных делителя. В ответе запишите все найденные числа в порядке возрастания, справа от каждого числа запишите его второй по величине делитель.
Решение:
Python
from fnmatch import fnmatch
def is_prime(n):
if n < 2:
return False
if n == 2:
return True
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
for n in range(int((2 * 10**8)**0.5), int((3 * 10**8)**0.5) + 1):
if is_prime(n) and fnmatch(str(n**2), '?*37*21'):
print(n**2, n)
Ответ:
\(223173721 \,\, 14939\)
\(226833721 \,\, 15061\)
\(233753521 \,\, 15289\)
\(262083721 \,\, 16189\)
\(289374121 \,\, 17011\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене