Задача #2212
Делители и маски
(С.Якунин) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
- символ «N» означает произвольное составное число.
Например, маске 12N3*4?5 соответствуют числа 12253405 и 12300405.
Среди чисел до 108 найдите числа, удовлетворяющие маске 1N03*6*, кратные числу 22768.
В ответе запишите: в первом столбце - сами числа в порядке возрастания, во втором - чему равно число N в этих числах (без незначащих нулей).
Примечание: пустая последовательность не является числом.
Войдите, чтобы история ответов и статистика сохранялись.
Решение
Ответ
12203648
22
14503216
45
15960368
596
18032256
8
from fnmatch import *
def prime(x):
return x>1 and all(x%d != 0 for d in range(2, int(x**0.5)+1))
for i in range(22768, 10**8, 22768):
if fnmatch(str(i), '1*03*6*'):
rub = str(i)[str(i).index('1')+1:str(i).find('03')]
if len(rub)>0 and rub[0]!='0' and not(prime(int(rub))):
print(i, rub)