Тип 25 № 73851 
Обработка целочисленной информации. Маска числа
i
Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе
пустую) последовательность цифр.
Например, маске 123*4?5 соответствуют числа 123405 и 12376415.
Найдите все натуральные числа, принадлежащие интервалу [108; 2 · 108],
которые соответствуют маске ?*42*81 и имеют ровно три натуральных делителя.
В ответе запишите все найденные числа в порядке возрастания.
Решение. Приведём решение на языке Python.
def F(n):
deliteli = set()
for i in range(2, int(n**0.5)+1):
if n%i == 0:
deliteli|={i, n//i}
return deliteli
from fnmatch import *
for x in range (10**8, 2*10**8+1):
if fnmatch(str(x),'?*42*81'):
if len(F(x)) == 1:
print(x)
Ответ:
114297481
141824281
142587481
149842081
Ответ: 114297481, 141824281, 142587481, 149842081.
Приведём решение Юрия Красильникова на языке Python.
def prostoe(n):
k=2
while k**2 <= n:
if n%k==0: return False
k+=1
return True
# Если число имеет ровно три натуральных делителя, то оно является квадратом простого числа.
from fnmatch import fnmatch
for x in range (10**4,int(2**0.5*10**4+1)):
if prostoe(x) and fnmatch(str(x**2),'?*42*81'): print(x**2)
Ответ: 114297481&141824281&142587481&149842081
73851
114297481 141824281 142587481 149842081