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

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

(PRO100-ЕГЭ) На вход алгоритма подаётся натуральное число \(N.\) Алгоритм строит по нему новое число \(R\) следующим образом.

  1. Строится шестеричная запись числа \(N.\)
  2. Далее эта запись обрабатывается по следующему правилу:
    1. если число \(N\) делится на \(3,\) то к этой записи дописываются две первые шестеричные цифры;
    2. если число \(N\) на \(3\) не делится, то остаток от деления на \(3\) умножается на \(10,\) переводится в шестеричную запись и дописывается в конец числа.

Полученная таким образом запись является шестеричной записью искомого числа \(R.\)

Пример. Число \(11_{10} = 15_6\) не делится на \(3,\) поэтому в конец его шестеричной записи \(15_6\) дописывается шестеричная запись числа \((11 \mod 6) \cdot 10 = 20 = 32_6\), так что результатом работы автомата является число \(1532_6 = 416_{10}\). Исходное число \(12_{10} = 20_6\) делится на \(3,\) поэтому в конец шестеричной записи \(20_6\) дописываются её две первых цифры \(20,\) так что результатом работы автомата является число \(2020_6 = 444_{10}\).

Укажите минимальное число \(R,\) большее \(680,\) которое может быть получено с помощью описанного алгоритма. В ответе запишите это число в десятичной системе счисления.

Решение:

Python


def conv(N):
    ans = ''
    while N:
        ans = str(N % 6) + ans
        N //= 6
    return ans

def R(N):
    d = conv(N)
    if N % 3 == 0:
        d += d[:2]
    else:
        d += conv(N % 3 * 10)
    return int(d, 6)

print(min(R(N) for N in range(7, 500) if R(N) > 680))

Ответ: \(694\)