Задача к ЕГЭ по информатике на тему «Маски» №10

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

– символ «?» означает ровно одну произвольную цифру;

– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

– символ «#» означает любое простое двухзначное число

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих   10 10  , найдите все числа, соответствующие маске #1*1#.

В ответ запишите количество найденных чисел.

from fnmatch import *
def f(x): # функция проверки числа на простоту
    for i in range(2, int(x**0.5)+1):
        if x % i == 0:
            return False
    return True
t = [] # список простых чисел
for i in range(10, 100):
    if f(i):
        t.append(i)
res = [] # список подходящих чисел
for i in range(10**6):
    if fnmatch(str(i), ’1*1’): # если число частично удовлетворяет маске
        for j in t: # перебор простых чисел
            for k in t: # перебор простых чисел
                n = int(str(j) + str(i) + str(k)) # собираем число, удовлетворяющее маске
                if n <= 10**10:
                    res.append(n)

print(len(set(res)))

Ответ: 4899951
Оцените статью
Я решу все!