Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела рекурсия
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#63247

Алгоритм вычисления значения функции F(n)  , где n  - целое неотрицательное число, задан следующими соотношениями:

F (0) = 6  ;

F (n) = 1+ F (n∕2)  , если n > 0  и n  четное;

F (n) = F(n∕∕2)  , в остальных случаях.

В данной задаче ∕∕  означает деление нацело.

Определите количество значений n  на отрезке [1;1000000000]  , для которых F (n) = 9  .

Показать ответ и решение

Решение №1

def build_bin(string, lenght):
    # Если длина построенного слова совпадает с максимальной длинной
    if len(string) == lenght:
        return string.count(’0’) == 3 and int(string, 2) <= 10**9
    counter = 0
    # Строим новые двоичные числа (прибавляем 0 или 1)
    if string.count(’0’) < 3:
        counter += build_bin(string + ’0’, lenght) + \
                   build_bin(string + ’1’, lenght)
    # Если дошли до количества равного 3, то прибавляем данное
    # число (дописываем единицы)
    if string.count(’0’) == 3:
        counter += int(string + ’1’ * (lenght - len(string)), 2) <= 10**9
    return counter

ans = 0
for i in range(4, 31):
    ans += build_bin(’1’, i)
print(ans)

Решение №2

ans = 0
# Будем строить вида "из всех единичек"
# Напимер: 1111111 и нужно перебрать три единички
# То есть вычесть 3 единички из двоичного числа
# Поэтому вычитаем степени двойки
for i in range(31):
    for j in range(i + 1, 31):
        for k in range(j + 1, 31):
            for a in range(k + 1, 31):
                N = 2 ** (a + 1)
                N -= 1
                N = N - 2 ** k - 2 ** j - 2 ** i
                if 1 <= N <= 10 ** 9:
                    ans += 1
print(ans)

Ответ: 24552

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное обучение
в Школково

Для детей ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Брянской областей, а также школьникам, находящимся в пунктах временного размещения Крыма обучение на платформе бесплатное.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ или олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!