На предприятии каждой изготовленной детали присваивают серийный номер, содержащий десятичные цифры, 26 латинских букв (без учёта регистра) и символы из 8164-символьного специального алфавита. В базе данных для хранения каждого серийного номера отведено одинаковое и минимально возможное число байт. При этом используется посимвольное кодирование серийных номеров, все символы кодируются одинаковым и минимально возможным числом бит. Известно, что для хранения 835 серийных номеров отведено более 156 Кбайт памяти. Определите минимально возможную длину серийного номера. В ответе запишите только целое число.
Заметим, что k бит позволяют кодировать 2k символов.
Для кодирования серийного номера, использующей десятичные цифры, 26 латинских букв (без учёта регистра) и символы из 8164-символьного специального алфавита, требуется 14 бит (ведь 214 = 16384 ).
Для хранения серийного номера требуется
Для хранения номеров потребовалось:
Так как для хранения каждого серийного номера отведено одинаковое и минимально возможное число байт:
Максимальная возможная длина серийного номера 110.
Ответ: 110.
Приведём решение Юрия Красильникова на языке Python.
m = 10+26+8164 # мощность алфавита
k = 1
while 2**k < m: k += 1 # количество бит в коде символа
for l in range(1,10000): # l - длина серийного номера
bits = l*k # сколько бит в серийном номере
bytes = bits//8
if bits%8 != 0: bytes += 1 # сколько байтов в серийном номере
if bytes*835 > 156*1024: # если 835 серийных номеров не помещаются в 156К
print(l)
break

