(А. Михайлов) На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число кратно 3, то к двоичной записи числа слева дописывается 1, а затем два правых разряда заменяются на 11;
б) если число не кратно 3, то к двоичной записи числа слева дописывается 10 и справа дописывается 0.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 410 = 1002 результатом является число 4010 = 1010002, а для исходного числа 610 = 1102 это число 1510 = 111112.
Укажите минимальное значение R, которое превышает 2000 и может быть результатом работы данного алгоритма, при условии, что N не может быть нечётным.
В ответе запишите это число в десятичной системе счисления.
Решение
🔹 Шаг 1. Перебор чётных чисел и двоичная запись
# перебор чётных чисел и двоичная запись
for N in range(2, 42, 2):
R = f'{N:b}'
print(N, '→', R)
📌 Результат: 2 → 10, 4 → 100, 6 → 110, 40 → 101000 и т.д.
🔹 Шаг 2. Проверка делимости на 3
# проверка делимости на 3
for N in range(2, 42, 2):
R = f'{N:b}'
if N % 3 == 0:
print(N, R, 'кратно 3')
else:
print(N, R, 'НЕ кратно 3')
📌 Результат: 2 10 НЕ кратно 3, 4 100 НЕ кратно 3, 6 110 кратно 3, 40 101000 НЕ кратно 3 и т.д.
🔹 Шаг 3. Изменение двоичной строки
# изменение двоичной строки
for N in range(2, 42, 2):
R = f'{N:b}'
if N % 3 == 0:
R = '1' + R[:-2] + '11'
print(N, '→', R, '(кратно 3)')
else:
R = '10' + R + '0'
print(N, '→', R, '(не кратно 3)')
📌 Результат: 2 → 10100 (не кратно 3), 4 → 101000 (не кратно 3), 6 → 1111 (кратно 3), 40 → 101010000 (не кратно 3) и т.д.
🔹 Шаг 4. Поиск минимального R > 2000
# поиск минимального R > 2000
MIN_R = 200
for N in range(2, 42, 2):
R = f'{N:b}'
if N % 3 == 0:
R = '1' + R[:-2] + '11'
else:
R = '10' + R + '0'
R = int(R, 2)
if R > 2000:
MIN_R = min(R, MIN_R)
print(MIN_R)
📌 Результат: 200
🔹 Шаг 5. Поиск минимального R, превышающего 2000 (N чётные)
Цель: собрать всё вместе и понять задачу целиком.
MIN_R = 10 ** 9
for N in range(2, 10000, 2):
R = f'{N:b}'
if N % 3 == 0:
R = '1' + R[:-2] + '11'
else:
R = '10' + R + '0'
R = int(R, 2)
if R > 2000:
MIN_R = min(R, MIN_R)
print(MIN_R)
📌 Результат: минимальное значение R, превышающее 2000 (через MIN_R). Ответ: 2003.