Задание 11 ЕГЭ: мощность алфавита
Мощность алфавита серийных номеров. Тема номера — информационный объём и мощность алфавита. Ниже — пример с ответом и решением; кнопкой под ним можно решить такую же задачу с другими числами, ответ проверится сразу.
Пример
При регистрации в компьютерной системе каждому пользователю выдаётся пароль, состоящий из 127 символов. В базе данных для хранения каждого пароля отведено одинаковое и минимально возможное целое число байт. При этом используется посимвольное кодирование, все символы кодируются одинаковым и минимально возможным числом бит. Известно, что для хранения 47 273 паролей отведено не более 2331 Кбайт памяти. Определите максимально возможную мощность алфавита, используемого для записи паролей. В ответе запишите только целое число.
Ответ
8Решение
На один номер можно потратить не более 2331 · 1024 / 47 273 байт, то есть не больше 50 байт = 400 бит (целое число байт, округляем вниз).
На символ — не больше 400 / 127, то есть 3 бит. Проверка: при 3 битах номер занимает ⌈127 · 3 / 8⌉ = 48 байт, при 4 — 64 байт (уже не помещается).
Мощность алфавита не больше 23 = 8.
import math
best = 0
for power in range(2, 70000):
bits = math.ceil(math.log2(power)) # бит на символ
per_number = math.ceil(127 * bits / 8) # байт на номер
if 47273 * per_number <= 2331 * 1024:
best = power
print(best)