На складе хранились 75 железобетонных, несколько несколько деревянных и полимерных шпал. Сообщение о том, что для ремонта пути использовали деревянные шпалы с этого склада, несёт 3 бита информации, полимерные-2 бита. Определить общее количество шпал хранившихся на складе
Строим группы так:
(1) - 1
(2) - 2, 3, 5, 7, 11, 13... - все простые
(3) - 4, 6, 9, 10, 14, 15... - произведения двух простых
...
(k) - произведения (k - 1) простых
И так пока не кончатся все числа. Поскольку в каждой группе наименьшее число 2^(k - 1), то k - минимальное, для которого 2^(k - 1) > N
По построению явно во всех группах ни одно число не делится на другое. Осталось проверить, что получено минимальное число групп.
Это очевидно: числа 1, 2, 4, ..., 2^(k-1) должны быть в разных группах.
Решение:
n = int(input())
t = 1
k = 0
while t <= n:
t *= 2
k += 1
print(k)
Таким образом получаем:
79 : 2 = 39 (остаток 1)
39 : 2 = 19 ( 1 )
19 : 2 = 9 ( 1 )
9 : 2 = 4 ( 1 )
4 : 2 = 2 ( 0 )
2 : 2 = 1 ( 0 )
1 : 2 = 0 ( 1 )
Собираем остатки в обратном порядке, получаем число 100111,
т.е. 79 (в 10 СС) = 100111 (в 2 СС)
79 : 16 = 4 ( ост. 15 ) 15 соответствует букве F
4 : 16 = 0 ( 4 )
т.е. 79 (в 10 СС) = 4F (в 16 СС)
Аналогично получаем:
79 (в 10 СС) = 117 (в 8 СС)
169 (в 10 СС) = 10100100 (в 2 СС)
169 (в 10 СС) = 244 (в 8 СС)
169 (в 10 СС) = A4 (в 16 СС)