
№ 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.