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

