Тип 25 № 59773 
Обработка целочисленной информации. Маска числа
i
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «∗» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Найдите все натуральные числа, не превосходящие 108, для которых выполнены все условия:
— соответствуют маске 3?1*57;
— делятся на 1991 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке
возрастания, справа от каждого числа их частное от деления на 1991.
Решение. Будем последовательно рассматривать каждое целое число, кратное 1991, затем каждое число проверять на соответствие маске.
Приведём решение на языке Python.
from fnmatch import *
for x in range(0, 10**8, 1991):
# Перебираем все числа от 0 с шагом 1991, будут получены числа кратные 1991
if fnmatch(str(x), '3?1*57'):
# Проверяем полученное число соответствию заданию
print(x, x // 1991)
В результате работы программа должна вывести следующее:
30117857 15127
31113357 15627
32108857 16127
33104357 16627
Приведём другое решение на языке Python.
x, y, ans = 0, '', []
num = int('3' + str(x) + '1' + y + '57')
for x in range(0, 10):
for y in range(1, 10000):
num = int('3' + str(x) + '1' + str(y)[1::] + '57')
if num % 1991 == 0 and num not in ans:
ans.append(num)
ans.sort()
for i in ans:
print(i, i // 1991)
Ответ: 30117857&15127&31113357&15627&32108857&16127&33104357&16627
59773
30117857 15127 31113357 15627 32108857 16127 33104357 16627