Тип 25 № 56553 

Обработка целочисленной информации. Маска числа
i
Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Пример. Маске 123*4?5 соответствуют числа 123405 и 12376415.
Найдите все натуральные числа, не превышающие 1010, которые соответствуют маске 1?2655*8 и при этом без остатка делятся на 4173.
В ответе запишите все найденные числа в порядке возрастания.
Решение. Приведём решение на языке Python.
for x in range(10):
s = '1' + str(x) + '26558'
if int(s) % 4173 == 0:
print(s)
for x in range(10):
for y in range(1000):
s = '1' + str(x) + '2655' + str(y) + '8'
if int(s) < 10**10 and int(s) % 4173 == 0:
print(s)
for x in range(10):
for y in range(1000):
s = '1' + str(x) + '26550' + str(y) + '8'
if int(s) < 10**10 and int(s) % 4173 == 0:
print(s)
for x in range(10):
for y in range(1000):
s = '1' + str(x) + '265500' + str(y) + '8'
if int(s) < 10**10 and int(s) % 4173 == 0:
print(s)
В результате работы программа должна вывести следующее:
1026558
1226553198
1526550168
Приведём решение Бориса Савельева на языке Python.
from fnmatch import*
a = []
for i in range (4173,10**10,4173):
if fnmatch(str(i),'1?2655*8') and i%4173==0:
a.append(i)
a.sort()
for i in range (0,len(a)):
print(a[i])
Приведём решение Андрея Тухманова на языке Python.
from fnmatch import *
for i in range(0, 10 ** 10, 4173):
if fnmatch(str(i), '1?2655*8'):
print(i)
Ответ: 1026558&1226553198&1526550168