№ 7724 (Уровень: Базовый)

Разбор 25.PNG

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

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

Найдите все натуральные числа, не превосходящие 109, для которых выполнены все условия:

В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, справа от каждого числа кол-во его делителей.

ray-so-export (6).png

  1. from fnmatch import * - импортируем все функции из библиотеки fnmatch, который предоставляет возможность сравнивать строки с шаблонами.
  2. for x in range(1018, 10**9, 1018): - начинаем цикл, перебирая значения x в диапазоне от 1018 до 10**9 с шагом 1018 (таким образом мы сразу ищем числа, которые делятся на 1018 без остатка см. условие).
  3. if fnmatch(str(x), '*18??18'): - проверяем, если строковое представление x соответствует шаблону '*18??18' с помощью функции fnmatch.
  4. if x % 18 == 0: - проверяем, если x делится на 18 без остатка.
  5. divisors = set() - создаем пустое множество для хранения делителей.
  6. for j in range(1, int(x**0.5)+1): - начинаем цикл, перебирая значения j от 1 до корня из x плюс 1 (int(x**0.5)+1 помогает нам искать пары чисел, используя корни чисел, так же это оптимизирует работу алгоритма).