Тип 25 № 63041 
Обработка целочисленной информации. Маска числа
i
Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Например, маске 123*4?5 соответствуют числа 123405 и 12376415.
Найдите все натуральные числа, не превышающие 1010, которые соответствуют маске 1*4302?1 и при этом без остатка делятся на 3147. В ответе запишите все найденные числа в порядке возрастания.
Решение. Будем последовательно рассматривать каждое целое число, кратное 3147, затем каждое число проверять на соответствие маске.
Приведём решение на языке Python.
from fnmatch import *
for x in range(0, 10**10, 3147):
# Перебираем все числа от 0 с шагом 3147, будут получены числа кратные 3147
if fnmatch(str(x), '1*4302?1'):
# Проверяем полученное число соответствию заданию
print(x)
В результате работы программа должна вывести следующее:
100430211
176430261
1374430221
1450430271
1973430201
Приведём решение Юрия Красильникова на языке Python.
from itertools import product
цифры = '0123456789'
# Т. к. число < 10**10 (число 10**10, очевидно, не соответствует маске),
# то последовательность на месте "*" не может быть длиннее 3.
звезды = [''.join(x) for длина in range(4) for x in product(цифры,repeat=длина)]
# звезды - все строки из цифр длиной от 0 до 3
числа = sorted([int(f'1{зв}4302{ц}1') for зв in звезды for ц in цифры])
# числа - сортированный список всех чисел меньше 10**10, отвечающих маске
for x in числа:
if x%3147 == 0: # если число делится на 3147 - печатаем
print(x)
Ответ: 100430211&176430261&1374430221&1450430271&1973430201
63041
100430211 176430261 1374430221 1450430271 1973430201