Итак, нужно найти число групп, в каждой из которых ни одно из чисел не делит все остальные.
Строим группы так: (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)
Что бы перевести число из 10-чной СС в СС с другим основанием (в данной задаче с основанием 8 и 16) надо это число последовательно делить на основание новой СС, записывая остатки от деления в обратном порядке. Это и будет искомое число. При этом учитываем, что двузначные остатки обозначаются буквами английского алфавита, например 10 это A, 11 - B, 12 - C и т.д.
Строим группы так:
(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)