Задания
Версия для печати и копирования в MS Word
Тип 25 № 73880
i

Маска числа  — это по­сле­до­ва­тель­ность цифр, в ко­то­рой могут встре­чать­ся спе­ци­аль­ные сим­во­лы «?» и «*». Сим­вол «?» озна­ча­ет ровно одну про­из­воль­ную цифру, сим­вол «*» озна­ча­ет про­из­воль­ную (в том числе пу­стую) по­сле­до­ва­тель­ность цифр.

На­при­мер, маске 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)