(Д. Муфаззалов) Обозначим через \(a // b\) целую часть от частного при делении числа \(a\) на число \(b.\) Алгоритм вычисления значения функции \(F(n),\) где \(n\) – натуральное число, задан следующими соотношениями:
Чему равно значение выражения \(F(2025)?\)
Решение:
Если число \(n\) является степенью двойки \(2^p = 1\underbrace{0 \ldots 0_2}_p,\) \(p > 1\) то результатом работы алгоритма будет число \(p = \log_2 2^p.\) Если число не является степенью двойки, то в его двоичной записи присутствуют как минимум две единицы. Это приведёт к тому, что после исполнения алгоритма получим число, равное количеству значащих разрядов в двоичной записи числа. Т.о., функция, приведённая в условии задания, для \(n > 2\) будет эквивалентна функции \(\left\lceil \log_2 n \right\rceil.\) Для нашего случая получаем \(\left\lceil \log_2 2025 \right\rceil = 11.\)
Проверяем программно
Python
from math import log2, ceil
def F(n):
if n < 3:
return 1
return F((n + 1) // 2) + 1
print(F(2025), ceil(log2(2025)))
Ответ: \(11\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене