Алгоритм вычисления значения функции \(F(n),\) где \(n\) – целое неотрицательное число, задан следующими соотношениями:
Здесь \(//\) означает деление нацело. Определите количество значений \(n\) на отрезке \([1,~1~000~ 000~ 000],\) для которых \(F(n) = 7.\)
Решение:
Минимальное значение функции \(F(n)\) равно \(5.\) Если число нечётное, то просто отбрасывается последняя цифра в двоичной записи этого числа, если же число делится на \(2,\) т.е. в двоичной записи оно оканчивается на ноль, то к значению функции добавляется \(1.\) Т.о. функция \(F(n) = 7\) только для тех чисел, у которых в двоичной записи присутствует ровно два нуля.
Python
from itertools import combinations
q = 0
for n in range(2, 30):
for a, b in combinations(range(1, n + 1), 2):
tmp = ['1'] * (n + 1)
tmp[a] = '0'
tmp[b] = '0'
q += int(''.join(tmp), 2) < 1_000_000_000
print(q)
Ответ: \(3712\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене