Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске
*
?
и делящиеся на
без остатка.
В ответе запишите количество найденных чисел.
Решение через циклы
count = 0
for x in "1234567890":
count += (int("12" + "4" + x + "65") % 141 == 0) # проверка, что число удовлетворяет маске с пустой звёздочкой
for y in "1234567890":
count += (int("12" + y + "4" + x + "65") % 141 == 0) # проверка, что число удовлетворяет маске с одним символом в звёздочке
for z in "1234567890":
count += (int("12" + y + z + "4" + x + "65") % 141 == 0) # проверка, что число удовлетворяет маске с двумя символами в звёздочке
print(count)
Решение через срезы
count = 0
for x in range(124080,10**8+1,141): # для оптимизации делаем цикл с шагом 141 с числа кратного 141, таким образом, мы будем проходиться только по кратным 141 числам
n = str(x)
if ’12’ in n[:2] and n[-4] == ’4’ and ’65’ in n[-2:]: # проверка, что число удовлетворяет маске
count += 1
print(count)