Задание 5. Информатика. ЕГЭ. Поляков-6860

Просмотры: 76
Изменено: 24 февраля 2025

*(В. Шубинкин) Алгоритм получает на вход натуральное число \(N\) и строит по нему новое число \(R\) следующим образом:

  1. Строится запись числа \(N\) в системе счисления с основанием \(80.\)
  2. Отдельно складываются чётные и нечётные цифры числа. Если чётных или нечётных чисел нет, сумма считается равной нулю.
  3. У большей из сумм определяется последняя цифра в системе счисления с основанием \(80.\) Эта цифра приписывается в конец восьмидесятеричной записи числа \(N.\)
  4. Пункты 2 и 3 повторяются ещё один раз.

Результат переводится в десятичную систему счисления.

Пример. Алгоритм получает число \(N = 83_{10} = 13_{80}.\) Сумма чётных цифр принимается равной нулю (их нет в записи числа), сумма нечётных цифр равна \(4 > 0.\) Число \(4_{10} = 4_{80}\) – заканчивается на цифру \(4\) в системе счисления с основанием \(80;\) приписываем её к \(13_{80},\) получаем \(134_{80}.\) Теперь обе суммы равны \(4,\) поэтому в конец приписывается ещё одна цифра \(4,\) получаем \(1344_{80} = 531524_{10}.\)

Определите наименьшее число \(N,\) при котором результат работы алгоритма \(R\) будет больше \(1000000_{10}.\) В ответе запишите это число в десятичной системе счисления.

Решение:

Python


from itertools import count

def conv(n):
    ans = []
    while n:
        ans.append(n % 80)
        n //= 80
    return ans[::-1]

def R(N):
    tmp = conv(N)
    for _ in range(2):
        s = [sum([0] + [x for x in tmp if x % 2 == 0]), sum([0] + [x for x in tmp if x % 2 == 1])]
        s.sort()
        tmp += [s[1] % 80]
    return sum(n * 80**p for n, p in zip(tmp[::-1], count(0)))

for N in count(1):
    if R(N) > 1_000_000:
        print(N)
        break

Ответ: \(156\)