№ 6604 Пробник ИМЦ СПб (Уровень: Средний)
Дана программа для Редактора:
ПОКА нашлось(>1) ИЛИ нашлось(>2) ИЛИ нашлось(>3)
ЕСЛИ нашлось(>1)
ТО заменить(>1,2>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось(>2)
ТО заменить(>2,3>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось(>3)
ТО заменить(>3,11>)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
На вход программы поступает строка, начинающаяся с символа «>», а затем содержащая 15 цифр 1, 35 цифры 2 и m цифр 3, расположенных в произвольном порядке. Определите минимальное значение m, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, будет иметь ровно 3 различных натуральных делителя, не включая единицы и самого значения суммы.
def Divisors(x):
- Создаем функцию с именем Divisors
, которая принимает один аргумент x
. В этой функции будем искать делители числа.divisors = set()
- Создаем пустое множество с именем divisors
. В него будем складывать найденные делители.for j in range(2, int(x**0.5)+1):
- Используем цикл for
для перебора всех чисел от 2 до целой части квадратного корня из x
плюс 1 и присваиваем каждому числу значение переменной j
. Таким способом мы сможем перебрав меньшее кол-во чисел найти все делители числа через найденный левый делитель и его сомножитель - правый делитель.if x % j == 0:
- Проверяем, делится ли x
на j
без остатка, если делится, то нашли делитель.divisors.add(j)
- Добавляем значение j
в множество divisors
.divisors.add(x // j)
- Добавляем значение x
деленное на j
(сомножитель) без остатка в множество divisors
.return sorted(divisors)
- Возвращаем отсортированное множество divisors
, то есть множество всех делителей числа x
.for m in range(1, 10000):
- Используем цикл for
для перебора всех чисел от 1 до 9999 и присваиваем каждому числу значение переменной m
.s = '>' + '1' * 15 + '2' * 35 + '3' * m
- Создаем строку s
, состоящую из символа >
, 15 символов 1
, 35 символов 2
и m
символов 3
.while '>1' in s or '>2' in s or '>3' in s:
- Используем цикл while
, чтобы проверить, содержится ли в строке s
подстрока >1
, >2
или >3
.