Задание 5. Информатика. ЕГЭ. Поляков-6860
- Просмотры: 76
- Изменено: 24 февраля 2025
*(В. Шубинкин) Алгоритм получает на вход натуральное число \(N\) и строит по нему новое число \(R\) следующим образом:
- Строится запись числа \(N\) в системе счисления с основанием \(80.\)
- Отдельно складываются чётные и нечётные цифры числа. Если чётных или нечётных чисел нет, сумма считается равной нулю.
- У большей из сумм определяется последняя цифра в системе счисления с основанием \(80.\) Эта цифра приписывается в конец восьмидесятеричной записи числа \(N.\)
- Пункты 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\)