Позиционные системы счисления. Реши сам, потом открой решение.
Пример 1
Операнды арифметического выражения записаны в системе счисления с основанием 22.
27x9887622+26x5122+711x522
В записи чисел переменной x обозначена неизвестная цифра из алфавита 22-ричной системы счисления. Определите наименьшее значение x, при котором значение данного арифметического выражения кратно 21. Для найденного x вычислите частное от деления значения арифметического выражения на 21 и укажите его в ответе в десятичной системе счисления. Основание системы счисления указывать не нужно.
Перебираем цифру x от 0 до 21, переводим каждое слагаемое в десятичную систему (схемой Горнера) и проверяем делимость суммы на 21.
def num(s, x):
v = 0
for c in s:
v = v * 22 + (x if c == 'x' else int(c))
return v
for x in range(22):
s = num('27x98876', x) + num('26x51', x) + num('711x5', x)
if s % 21 == 0:
print(x, s // 21)
break
Наименьшее подходящее x=3, частное равно 276296118.
Ответ: 276296118
Пример 2
Значение арифметического выражения
3⋅31258+2⋅6257−4⋅6256+3⋅1255−2⋅254−2025
записали в системе счисления с основанием 25. Сколько значащих нулей содержится в этой записи?
Python работает с длинными числами, поэтому выражение можно вычислить точно и выписать его цифры в 25-ричной системе, отбрасывая по одной с конца.
v = 3 * 3125**8 + 2 * 625**7 - 4 * 625**6 + 3 * 125**5 - 2 * 25**4 - 2025
k = 0
while v:
k += v % 25 == 0
v //= 25
print(k)
Цикл идёт, пока число не станет нулём, поэтому считаются только значащие нули. Их 10.
Ответ: 10
Пример 3
Значение арифметического выражения 7170+7100−x, где x – целое положительное число, не превышающее 2030, записали в 7-ричной системе счисления. Определите наибольшее значение x, при котором в данной записи значения арифметического выражения содержится ровно 71 нуль.
В ответе запишите число в десятичной системе счисления.
Для каждого x от 1 до 2030 вычисляем выражение, считаем нули в 7-ричной записи и запоминаем последнее (наибольшее) подходящее x.
best = 0
for x in range(1, 2031):
v, k = 7**170 + 7**100 - x, 0
while v:
k += v % 7 == 0
v //= 7
if k == 71:
best = x
print(best)
Почему так: 7170+7100 в 7-ричной записи — единица, 69 нулей, единица и 100 нулей. Так как x<74, после вычитания получится: 1, 69 нулей, 0 на месте второй единицы, 96 шестёрок и четыре последние цифры числа 74−x=2401−x. Нулей уже 70, значит, среди последних четырёх цифр нуль должен быть ровно один. При x=2030: 371=10407 — два нуля; при x=2029: 372=10417 — один.