Серийный номер детали состоит из 40 символов. Для записи серийного номера используются латинские буквы (строчные и прописные), десятичные цифры и символы из дополнительного набора. В базе данных для хранения каждого серийного номера отведено одинаковое и минимально возможное число байт. При этом используется посимвольное кодирование серийных номеров, все символы кодируются одинаковым и минимально возможным числом бит.
Известно, что для хранения 1000 серийных номеров отведено не более 60 Кбайт памяти. Определите максимально возможное число символов в специальном алфавите. В ответе запишите только целое число.
Мощность алфавита равна M = 2 · 26 + 10 + x, где x — количество спец. символов. Также мощность алфавита равна M = 2i, где i — вес одного символа алфавита в бит. По условию задачи N = 40, n = 1000. Следовательно, объём одного кода получается: V1 = i · N. Весь объём равен
V = nV1 = niN = 60 Кбайт = 491520 бит,
откуда
i = 491520/(nN) ≈ 12 бит,
2 · 26 + 10 + x = 4096,
значит, x = 4034.
Ответ: 4034.
Приведём решение Юрия Красильникова на языке Python.
for k in range(100,1,-1): # длина кода символа в битах
bits = k*40 # длина серийного номера в битах
bytes = bits//8
if bits%8 != 0: bytes+=1 # длина серийного номера в байтах
if bytes*1000 <= 60*1024: # если 1000 номеров занимают не более 60К:
print(2**k-2*26-10)
break

