Главная страница
Навигация по странице:

  • Решение (способ Е.А. Смирнова, Нижегородская область)

  • Решение (программа на Python, Б.С. Михлин)

  • Решение (С.О. Куров, Москва)

  • Решение (программа на Python, Б.С. Михлин): используется встроенная «длинная арифметика» в Python: x = bin( 4**2015 + 8**405 - 2**150 - 122 )

  • Позиционные системы счисления


    Скачать 0.83 Mb.
    НазваниеПозиционные системы счисления
    Дата18.04.2022
    Размер0.83 Mb.
    Формат файлаdoc
    Имя файлаege14 3.doc
    ТипДокументы
    #483521
    страница4 из 14
    1   2   3   4   5   6   7   8   9   ...   14

    Ещё пример задания:


    Р-21. Сколько значащих нулей в двоичной записи числа
    4512 + 8512 – 2128 – 250

    Решение (способ Е.А. Смирнова, Нижегородская область):

    1. Общая идея: количество значащих нулей равно количеству всех знаков в двоичной записи числа (его длине!) минус количество единиц

    2. приведём все числа к степеням двойки, учитывая, что 250 = 256 – 4 – 2 = 28 – 22 – 21:

    4512 + 8512 – 2128 – 250 = (22)512 + (23)512 – 2128 – 28 + 22 + 21 =

    = 21536 + 21024 – 2128 – 28 + 22 + 21

    1. старшая степень двойки – 21536, двоичная запись этого числа представляет собой единицу и 1536 нулей, то есть, состоит из 1537 знаков; таким образом, остаётся найти количество единиц

    2. вспомним, число 2N2K при K < N записывается как N–K единиц и K нулей:

    3. для того чтобы использовать это свойство, нам нужно представить заданное выражение в виде пар вида 2N2K, причём в этой цепочке степени двойки нужно выстроить по убыванию

    4. в нашем случае вы выражении

    21536 + 21024 – 2128 – 28 + 22 + 21

    стоит два знака «минус» подряд, это не позволяет сразу использовать формулу

    1. используем теперь равенство , так что – 2128 = – 2129 + 2128; получаем

    21536 + 21024 – 2129 + 2128 – 28 + 22 + 21

    здесь две пары 2N2K , а остальные слагаемые дают по одной единице

    1. общее число единиц равно 1 + (1024 – 129) + (128 – 8) + 1 + 1 = 1018

    2. таким образом, количество значащих нулей равно 1537 – 1018 = 519

    3. ответ: 519.

    Решение (программа на Python, Б.С. Михлин):

    1. если доступна среда программирования на Python, можно написать программу, которая использует встроенную арифметику длинных чисел:

    x = 4**512 + 8**512 - 2**128 - 250

    print( bin(x)[2:].count('0') )

    1. ответ: 519.

    Ещё пример задания:


    Р-20. Сколько единиц в двоичной записи числа
    42015 + 8405 – 2150 – 122

    Решение (способ Е.А. Смирнова, Нижегородская область):

    1. приведём все числа к степеням двойки, учитывая, что 122 = 128 – 4 – 2 = 27 – 22 – 21:

    42015 + 8405 – 2150 – 122 = (22)2015 + (23)405 – 2150 – 27 + 22 + 21 =

    = 24030 + 21215 – 2150 – 27 + 22 + 21

    1. вспомним, число 2N2K при K < N записывается как N–K единиц и K нулей:

    2. для того чтобы использовать это свойство, нам нужно представить заданное выражение в виде пар вида 2N2K, причём в этой цепочке степени двойки нужно выстроить по убыванию

    3. в нашем случае вы выражении

    24030 + 21215 – 2150 – 27 + 22 + 21

    стоит два знака «минус» подряд, это не позволяет сразу использовать формулу

    1. используем теперь равенство , так что – 2150 = – 2151 + 2150; получаем

    24030 + 21215 – 2151 + 2150 – 27 + 22 + 21

    здесь две пары 2N2K , а остальные слагаемые дают по одной единице

    1. общее число единиц равно 1 + (1215 – 151) + (150 – 7) + 1 + 1 = 1210

    2. ответ: 1210.

    Решение (С.О. Куров, Москва):

    1. приведём все числа к степеням двойки, учитывая, что 122 = 128 – 4 – 2 = 27 – 22 – 21:

    42015 + 8405 – 2150 – 122 = (22)2015 + (23)405 – 2150 – 27 + 22 + 21 =

    = 24030 + 21215 – 2150 – 27 + 22 + 21

    1. ищем в разности крайнюю левую степень двойки и крайнюю правую 21215 – 27, при этом 2150 на время «теряем»

    2. определяем количество единиц в разности 21215 – 27, получаем 1215 – 7 = 1208 единиц

    3. так как «внутри» этой разности есть еще 2150, то просто вычитаем одну единицу: 1208 – 1 = 1207; итого в разности 21215 – 2150 – 27 ровно 1207 единиц

    4. осталось прибавить по одной единицы от чисел 24030, 22, 21

    5. Ответ: 1210

    Решение (программа на Python, Б.С. Михлин):

    1. используется встроенная «длинная арифметика» в Python:

    x = bin( 4**2015 + 8**405 - 2**150 - 122 )

    print( x.count( '1' ) )

    1. ответ: 1210.
    1   2   3   4   5   6   7   8   9   ...   14


    написать администратору сайта