На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 6, то к этой записи дописываются три последние двоичные цифры;
б) если число N на 6 не делится, то остаток от деления умножается на 2, переводится в двоичную запись и дописывается в конец числа.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 610 = 1102 результатом является число 1101102 = 5410, а для исходного числа 410 = 1002 — число 10010002 = 7210.
Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 370.
В ответе запишите это число в десятичной системе счисления.
Решение
🔹 Шаг 1. Перебор чисел и двоичная запись
# перебор чисел и двоичная запись
for N in range(1, 20):
R = f'{N:b}'
print(N, '→', R)
📌 Результат: 1 → 1, 2 → 10, 3 → 11, 19 → 10011 и т.д.
🔹 Шаг 2. Проверка делимости на 6
# проверка делимости на 6
for N in range(1, 20):
R = f'{N:b}'
if N % 6 == 0:
print(N, R, 'делится на 6')
else:
print(N, R, 'НЕ делится на 6')
📌 Результат: 1 1 НЕ делится на 6, 2 10 НЕ делится на 6, 3 11 НЕ делится на 6, 19 10011 НЕ делится на 6 и т.д.
🔹 Шаг 3. Изменение двоичной строки
# изменение двоичной строки
for N in range(1, 20):
R = f'{N:b}'
if N % 6 == 0:
R = R + R[-3:]
print(N, '→', R, '(приписали последние 3 бита)')
else:
r = (N % 6) * 2
R = R + f'{r:b}'
print(N, '→', R, f'(приписали {r:b})')
📌 Результат: 1 → 110 (приписали 10), 2 → 10100 (приписали 100), 3 → 11110 (приписали 110), 19 → 1001110 (приписали 10) и т.д.
🔹 Шаг 4. Перевод обратно в десятичное число
# перевод обратно в десятичное число
for N in range(1, 20):
R = f'{N:b}'
if N % 6 == 0:
R = R + R[-3:]
else:
r = (N % 6) * 2
R = R + f'{r:b}'
print(N, '→', R, '→', int(R, 2))
📌 Результат: 1 → 110 → 6, 2 → 10100 → 20, 3 → 11110 → 30, 19 → 1001110 → 78 и т.д.
🔹 Шаг 5. Поиск максимального N, при котором R < 370
Цель: собрать всё вместе и понять задачу целиком.
MAX_N = 0
for N in range(1, 100):
R = f'{N:b}'
if N % 6 == 0:
R = R + R[-3:]
else:
r = (N % 6) * 2
R = R + f'{r:b}'
R = int(R, 2)
if R < 370:
MAX_N = max(N, MAX_N)
print(MAX_N)
📌 Результат: максимальное значение N, при котором R < 370 (через MAX_N). Ответ: 91.