Тип 25 № 68526 
Обработка целочисленной информации. Маска числа
i
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 3?12?14*5, делящиеся на 1917 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на 1917.
Количество строк в таблице для ответа избыточно.
Решение. Будем последовательно рассматривать каждое целое число, кратное 1917, затем каждое число проверять на соответствие маске.
Приведём решение на языке Python.
from fnmatch import *
for x in range(0, 10**10, 1917):
# Перебираем все числа от 0 с шагом 1917, будут получены числа кратные 1917
if fnmatch(str(x), '3?12?14*5'):
# Проверяем полученное число соответствию заданию
print(x, x//1917)
В результате работы программа должна вывести следующее:
351261495 183235
3212614035 1675855
3412614645 1780185
3712414275 1936575
3912414885 2040905
Приведём решение Юрия Красильникова на языке Python.
from itertools import product
d='0123456789'
twod=[''.join(x) for dl in range(3) for x in product(d,repeat=dl)]
a=sorted([int(f'3{x}12{y}14{z}5') for x in d for y in d for z in twod])
for y in [x for x in a if x%1917==0]: print(y,y//1917)
Ответ: 351261495&183235&3212614035&1675855&3412614645&1780185&3712414275&1936575&3912414885&2040905
68526
351261495 183235 3212614035 1675855 3412614645 1780185 3712414275 1936575 3912414885 2040905