Задание 11 ЕГЭ: сколько памяти займут пароли, идентификаторы и серийные номера — и какой длины и из какого алфавита они могут быть
from math import *
a = 10 + 4090 # мощность: цифры + спецсимволы
i = ceil(log2(a)) # бит на символ: 2**i >= a
v = ceil(317 * i / 8) # байт на запись — целое, вверх
print(v * 262144 // 2**20) # объём в Мбайт
Три шага — и каждый округляется вверх: бит на символ
(ceil(log2(a))), байт на запись (ceil(… / 8)).
А вот «сколько записей влезет» округляется вниз: //,
половина записи не хранится.
for n in range(1, 10000): # длина записи
v = ceil(n * i / 8)
if v * 2000 <= 693 * 2**10: # «отведено не более 693 Кбайт»
last = n # подходит — запоминаем
print(last) # наибольшая подходящая
| В условии | В программе |
|---|---|
| десятичные цифры и 4090-символьный спецалфавит | a = 10 + 4090 |
| 52 латинские буквы с регистром · заглавные латинские | 52 · 26 (число не назовут) |
| цифры шестнадцатеричной системы | 16 — у системы с основанием N ровно N цифр |
| не более 693 Кбайт · менее 9 Мбайт | <= 693 * 2**10 · < 9 * 2**20 |
| более 23 Мбайт · не менее 5 Гбайт | > 23 * 2**20 · >= 5 * 2**30 |
| наибольшая длина / мощность | last = n, после цикла print(last) |
| наименьшая длина / мощность | print(n) и break |
| неизвестна мощность алфавита | for a in range(2, 100000):, в цикле i = ceil(log2(a)) |
| ещё 15 байт сведений о пользователе | v = ceil(n * i / 8) + 15 — после округления |
| сколько записей влезет | print(3 * 2**20 // v) |
ceil(log2(a)), а не int и не голый
log2;break. Мощность —
это a, а не число бит i.Задание 11 ЕГЭ: сколько памяти займут пароли, идентификаторы и серийные номера — и какой длины и из какого алфавита они могут быть
from math import *
a = 10 + 4090 # мощность: цифры + спецсимволы
i = ceil(log2(a)) # бит на символ: 2**i >= a
v = ceil(317 * i / 8) # байт на запись — целое, вверх
print(v * 262144 // 2**20) # объём в Мбайт
Три шага — и каждый округляется вверх: бит на символ
(ceil(log2(a))), байт на запись (ceil(… / 8)).
А вот «сколько записей влезет» округляется вниз: //,
половина записи не хранится.
for n in range(1, 10000): # длина записи
v = ceil(n * i / 8)
if v * 2000 <= 693 * 2**10: # «отведено не более 693 Кбайт»
last = n # подходит — запоминаем
print(last) # наибольшая подходящая
| В условии | В программе |
|---|---|
| десятичные цифры и 4090-символьный спецалфавит | a = 10 + 4090 |
| 52 латинские буквы с регистром · заглавные латинские | 52 · 26 (число не назовут) |
| цифры шестнадцатеричной системы | 16 — у системы с основанием N ровно N цифр |
| не более 693 Кбайт · менее 9 Мбайт | <= 693 * 2**10 · < 9 * 2**20 |
| более 23 Мбайт · не менее 5 Гбайт | > 23 * 2**20 · >= 5 * 2**30 |
| наибольшая длина / мощность | last = n, после цикла print(last) |
| наименьшая длина / мощность | print(n) и break |
| неизвестна мощность алфавита | for a in range(2, 100000):, в цикле i = ceil(log2(a)) |
| ещё 15 байт сведений о пользователе | v = ceil(n * i / 8) + 15 — после округления |
| сколько записей влезет | print(3 * 2**20 // v) |
ceil(log2(a)), а не int и не голый
log2;break. Мощность —
это a, а не число бит i.