🔹 Шаг 1. Как переводится запись из системы счисления p в десятичную
Идея:
любое слово в системе счисления с основанием p — это сумма цифра · p^позиция
s[::-1] — разворачиваем строку, чтобы младший разряд был первым
int(символ, 36) — переводит цифры и буквы (0–9, A–Z) в число
p**i — вес разряда
def f(s, p):
s = s[::-1]
return sum(int(s[i], 36) * p**i for i in range(len(s)))
📌 Результат: функция f переводит любое слово из системы с основанием p в десятичное число.
🔹 Шаг 2. Подбор основания системы счисления
Идея:
основание p неизвестно — перебираем все возможные p
в записи есть буквы (K, O, T, …), значит основание больше 9
def f(s, p):
s = s[::-1]
return sum(int(s[i], 36) * p**i for i in range(len(s)))
for p in range(10, 1000):
if f('KOT', p) + f('GOLODNI', p) == f('MEEOW', p) * f('100', p) - 20194023088:
print(p)
break
📌 Результат: находится наименьшее основание p, при котором равенство верно.
🔹 Шаг 3. Вычисление значения PURRₚ в десятичной системе
def f(s, p):
s = s[::-1]
return sum(int(s[i], 36) * p**i for i in range(len(s)))
for p in range(10, 1000):
if f('KOT', p) + f('GOLODNI', p) == f('MEEOW', p) * f('100', p) - 20194023088:
print(f('PURR', p))
break
📌 Результат: выводится число — ответ задачи: 1529685 (в десятичной системе; основание p указывать не нужно).