Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 137?15*7*50, делящиеся на 178750 без остатка.
В ответ запишите пары найденных чисел в порядке возрастания через пробел: найденное число и частное от деления на 178750.
Решение через fnmatch
from fnmatch import fnmatch
# для оптимизации делаем цикл с шагом 178750, начиная с числа кратного 178750, для того чтобы проходиться по числам кратным 178750
for x in range(137101250,10**12+1,178750):
if fnmatch(str(x),’137?15*7*50’): # проверка, что число соответствует маске
print(x,x//178750)
Решение через срезы
# для оптимизации делаем цикл с шагом 178750, начиная с числа кратного 178750, для того чтобы проходиться по числам кратным 178750
for x in range(137101250,10**12+1,178750):
n = str(x)
if ’137’ in n[:3] and ’15’ in n[4:6] and ’50’ in n[-2:]:
if ’7’ in n[6:-2]: # проверки, что число соответствует маске
print(x,x//178750)