№14
Примеры решений прототипа №2
Позиционные системы счисления
Примеры решения:
№ 11303 (Уровень: Базовый)
(М. Ишимов) Операнды арифметического выражения записаны в системе счисления с основанием 20.
\(627xJ8_{20} + H45Ix5HIJ_{20} + 4IDB49Jx7_{20}\)
В записи чисел переменной x обозначена неизвестная цифра из алфавита 20-ричной системы счисления. Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 19. Для найденного x вычислите частное от деления значения арифметического выражения на 19 и укажите его в ответе в десятичной системе счисления. Основание системы счисления указывать не нужно.
from string import printable
for x in printable[:20]:
n = int(f'627{x}J8', 20) + int(f'H45I{x}5HIJ', 20) + int(f'4IDB49J{x}7',20)
if n % 19 == 0: print(x, n // 19)
№ 7346 (Уровень: Средний)
(Д. Статный) Дано арифметическое выражение:
\(3x21_{81} + 17x4_{67}\)
В записи чисел переменной x обозначена неизвестная цифра из допустимого алфавита для указанных систем счисления. Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 35. Для найденного значения x вычислите частное от деления значения арифметического выражения на 35 и укажите его в ответе в десятичной системе счисления.
Варианты кода:
for x in range(66, 0, - 1):
n = 3 * 81 ** 3 + x * 81 ** 2 + 2 * 81 + 1 + 1 * 67 ** 3 + 7 * 67 ** 2 + x * 67 + 4
if n % 35 == 0:
print(n // 35)
break
def f(x:list, base):
r = 0
for p, el in enumerate(x[::-1]):
r += el * base ** p
return r
for x in range(66, 0, - 1):
n = f([3, x, 2, 1], 81) + f([1, 7, x, 4], 67)
if n % 35 == 0:
print(n // 35)
break
def f(x, base):
return sum(el * base ** p for p, el in enumerate(reversed(x)))
for x in range(66, 0, - 1):
n = f([3, x, 2, 1], 81) + f([1, 7, x, 4], 67)
if n % 35 == 0:
print(n // 35)
break