Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Например, маске 123*4?5 соответствуют числа 123405 и 12376415.
Найдите все натуральные числа, принадлежащие интервалу [108; 2 · 108], которые соответствуют маске ?*34*49 и имеют ровно три натуральных делителя.
В ответе запишите все найденные числа в порядке возрастания.
Ответ:
Приведём решение на языке 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),'?*34*49'):
if len(F(x)) == 1:
print(x)
Ответ:
109348849
134397649
152349649
193404649
Ответ: 109348849 и 134397649 и 152349649 и 193404649.
Приведём решение Юрия Красильникова на языке 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),'?*34*49'): print(x**2)

