Разбор 12.PNG

№ 6604 Пробник ИМЦ СПб (Уровень: Средний)

Дана программа для Редактора:

ПОКА нашлось(>1) ИЛИ нашлось(>2) ИЛИ нашлось(>3)
   ЕСЛИ нашлось(>1)
      ТО заменить(>1,2>)
   КОНЕЦ ЕСЛИ
   ЕСЛИ нашлось(>2)
      ТО заменить(>2,3>)
   КОНЕЦ ЕСЛИ
   ЕСЛИ нашлось(>3)
      ТО заменить(>3,11>)
   КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА

На вход программы поступает строка, начинающаяся с символа «>», а затем содержащая 15 цифр 1, 35 цифры 2 и m цифр 3, расположенных в произвольном порядке. Определите минимальное значение m, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, будет иметь ровно 3 различных натуральных делителя, не включая единицы и самого значения суммы.

Untitled

  1. def Divisors(x): - Создаем функцию с именем Divisors, которая принимает один аргумент x. В этой функции будем искать делители числа.
  2. divisors = set() - Создаем пустое множество с именем divisors. В него будем складывать найденные делители.
  3. for j in range(2, int(x**0.5)+1): - Используем цикл for для перебора всех чисел от 2 до целой части квадратного корня из x плюс 1 и присваиваем каждому числу значение переменной j. Таким способом мы сможем перебрав меньшее кол-во чисел найти все делители числа через найденный левый делитель и его сомножитель - правый делитель.
  4. if x % j == 0: - Проверяем, делится ли x на j без остатка, если делится, то нашли делитель.
  5. divisors.add(j) - Добавляем значение j в множество divisors.
  6. divisors.add(x // j) - Добавляем значение x деленное на j (сомножитель) без остатка в множество divisors.
  7. return sorted(divisors) - Возвращаем отсортированное множество divisors, то есть множество всех делителей числа x.
  8. for m in range(1, 10000): - Используем цикл for для перебора всех чисел от 1 до 9999 и присваиваем каждому числу значение переменной m.
  9. s = '>' + '1' * 15 + '2' * 35 + '3' * m - Создаем строку s, состоящую из символа >, 15 символов 1, 35 символов 2 и m символов 3.
  10. while '>1' in s or '>2' in s or '>3' in s: - Используем цикл while, чтобы проверить, содержится ли в строке s подстрока >1, >2 или >3.