№ 6210 (Уровень: Средний)
(Н. Сафронов) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
«?»
означает ровно одну произвольную цифру;«*»
означает любую последовательность цифр произвольной длины;
в том числе «*»
может задавать и пустую последовательность.Например, маске 123*4?5 соответствуют числа 123405 и 12300425.
Найдите все натуральные числа, не превосходящие 10**7
, для которых выполняются одновременно все условия:
*2?2*
;В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — сумму делителей.
Комментарии к решению задачи:
def Divisors(x):
- Объявляем функцию Divisors
, которая принимает один аргумент x
и будет вычислять его делители.divisors = set()
- Создаем пустое множество divisors
, куда будем складывать найденные делители.for j in range(1, int(x**0.5)+1):
- Используем цикл for
, чтобы перебрать все значения j
в интервале от 1 до квадратного корня из x
.
Уверен этот шаг стоит пояснить подробнее: такой алгоритм позволяет пробежать суммарно меньше чисел, но способствует нахождению первой половины делителей числа, а через найденные делители мы сможем найти их сомножители, например: делители числа 24: {1, 2, 3, 4, **тут корень** , 6, 8, 12, 24}