Задание 16. Информатика. Статград-22-3-2
- Просмотры: 2552
- Изменено: 25 ноября 2024
Алгоритм вычисления значения функции \(F(n)\), где \( n \) — целое неотрицательное число, задан следующими соотношениями:
\( F(0) = 0\);
\( F(n) = F(n-1) + 1\), если \(n\) нечётно;
\( F(n) = F(n/2)\), если \( n >0\) и при этом \( n \) чётно.
Укажите количество таких значений \( n < 1~000~000~000\), для которых \( F(n) = 3\).
Решение:
Python
На Пайтоне указанный алгоритм можно записать так.
Однако выполняться такой алгоритм при больших \(n\) будет очень долго. Значит для решения этой задачи нужны другие соображения. Легко заметить, что функция \( F(n)\) есть ни что иное, как подсчёт числа единиц в двоичной записи числа. Поэтому задачу решает более простой цикл:
Эту же задачу можно решить и не особо программируя. В командной строке Пайтона определяем разрядность числа \( 1~000~000~000\) в двоичной записи.
Осталось определить, сколькими способами можно разместить три единицы по тридцати позициям: $$ C^2_{30} = \frac{30!}{3! \, 27!} = \frac{28 \cdot 29 \cdot 30}{6} = 4060. $$
Ответ: 4060