На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.
1. Строится троичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи справа дописываются две последние троичные цифры;
б) если число N на 3 не делится, то вычисляется сумма цифр полученной троичной записи, эта сумма умножается на 2, переводится в троичную систему счисления и дописывается в конец числа.
Полученная таким образом запись является троичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 810 = 223 результатом является число 22223 = 8010, а для исходного числа 910 = 1003 это число 100003 = 8110
Укажите минимальное нечётное число R, большее 520, которое может быть получено с помощью описанного алгоритма.
В ответе запишите это число в десятичной системе счисления.
Решение
🔹 Шаг 1. Перебор чисел и троичная запись
def f3(x):
s = ''
while x:
x, ost = divmod(x, 3)
s += str(ost)
return s[::-1]
for N in range(1, 20):
s = f3(N)
print(N, '→', s)
📌 Результат: 1 → 1, 2 → 2, 3 → 10, 19 → 201 и т.д.
🔹 Шаг 2. Проверка делимости на 3
def f3(x):
s = ''
while x:
x, ost = divmod(x, 3)
s += str(ost)
return s[::-1]
for N in range(1, 20):
s = f3(N)
if N % 3 == 0:
print(N, s, 'делится на 3')
else:
print(N, s, 'НЕ делится на 3')
📌 Результат: 1 1 НЕ делится на 3, 2 2 НЕ делится на 3, 3 10 делится на 3, 19 201 НЕ делится на 3 и т.д.
🔹 Шаг 3. Изменение троичной строки
def f3(x):
s = ''
while x:
x, ost = divmod(x, 3)
s += str(ost)
return s[::-1]
for N in range(1, 20):
s = f3(N)
if N % 3 == 0:
s_new = s + s[-2:]
print(N, s, '→', s_new, '(приписали последние 2 троичные цифры)')
else:
digit_sum = sum(int(c) for c in s)
s_new = s + f3(digit_sum * 2)
print(N, s, '→', s_new, f'(приписали {f3(digit_sum * 2)})')
📌 Результат: 1 1 → 12 (приписали 2), 2 2 → 211 (приписали 11), 3 10 → 1010 (приписали последние 2 троичные цифры), 19 201 → 20120 (приписали 20) и т.д.
🔹 Шаг 4. Перевод обратно в десятичное число
def f3(x):
s = ''
while x:
x, ost = divmod(x, 3)
s += str(ost)
return s[::-1]
for N in range(1, 20):
s = f3(N)
if N % 3 == 0:
s = s + s[-2:]
else:
digit_sum = sum(int(c) for c in s)
s = s + f3(digit_sum * 2)
R = int(s, 3)
print(N, '→', s, '→', R)
📌 Результат: 1 → 12 → 5, 2 → 211 → 22, 3 → 1010 → 30, 19 → 20120 → 177 и т.д.
🔹 Шаг 5. Поиск минимального нечётного R больше 520
Цель: собрать всё вместе и понять задачу целиком.
def f3(x):
s = ''
while x:
x, ost = divmod(x, 3)
s += str(ost)
return s[::-1]
best_R = None
for N in range(1, 10000):
s = f3(N)
if N % 3 == 0:
s = s + s[-2:]
else:
digit_sum = sum(int(c) for c in s)
s = s + f3(digit_sum * 2)
R = int(s, 3)
if R > 520 and R % 2 == 1:
if best_R is None or R < best_R:
best_R = R
print(best_R)
📌 Результат: минимальное нечётное R, большее 520. Ответ: 567.