Вариант 1
минимальная мощность алфавитаНа предприятии каждой изготовленной детали присваивают серийный номер, состоящий из 1907 символов. В базе данных каждый серийный номер занимает одинаковое и минимально возможное целое число байт. При этом используется посимвольное кодирование серийных номеров, все символы кодируются одинаковым и минимально возможным целым числом бит. Известно, что для хранения 3 572 608 серийных номеров требуется не менее 6 Гбайт памяти. Определите минимально возможную мощность алфавита, используемого для записи серийных номеров. В ответе запишите только целое число.
Разбор
Шаг 1. Сколько байт как минимум на один номер. 6 Гбайт = 6 442 450 944 байт. На один номер приходится не меньше 6 442 450 944 / 3 572 608 ≈ 1803.29 байт, а так как номер занимает целое число байт — не меньше 1804 байт.
Шаг 2. Бит на символ. Если на символ отвести i бит, номер займёт ⌈1907·i / 8⌉ байт. При i = 7: ⌈13349 / 8⌉ = 1669 байт — мало; при i = 8: ⌈15256 / 8⌉ = 1907 байт — достаточно. Значит, на символ нужно не меньше 8 бит.
Шаг 3. Мощность алфавита. 8 бит на символ используется, когда в алфавите больше 27 = 128 символов. Минимальная мощность — 128 + 1 = 129.
Ответ: 129
Решение на Python.
from math import ceil, log2
L, N, need = 1907, 3572608, 6 * 2 ** 30 # символов, номеров, байт
for k in range(2, 10000): # мощность алфавита
i = ceil(log2(k)) # бит на символ
size = ceil(L * i / 8) # байт на номер
if N * size >= need:
print(k)
break