Позиционные системы счисления
Скачать 0.83 Mb.
|
Ещё пример задания:Р-21. Сколько значащих нулей в двоичной записи числа 4512 + 8512 – 2128 – 250 Решение (способ Е.А. Смирнова, Нижегородская область): Общая идея: количество значащих нулей равно количеству всех знаков в двоичной записи числа (его длине!) минус количество единиц приведём все числа к степеням двойки, учитывая, что 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 старшая степень двойки – 21536, двоичная запись этого числа представляет собой единицу и 1536 нулей, то есть, состоит из 1537 знаков; таким образом, остаётся найти количество единиц вспомним, число 2N–2K при K < N записывается как N–K единиц и K нулей: для того чтобы использовать это свойство, нам нужно представить заданное выражение в виде пар вида 2N–2K, причём в этой цепочке степени двойки нужно выстроить по убыванию в нашем случае вы выражении 21536 + 21024 – 2128 – 28 + 22 + 21 стоит два знака «минус» подряд, это не позволяет сразу использовать формулу используем теперь равенство , так что – 2128 = – 2129 + 2128; получаем 21536 + 21024 – 2129 + 2128 – 28 + 22 + 21 здесь две пары 2N–2K , а остальные слагаемые дают по одной единице общее число единиц равно 1 + (1024 – 129) + (128 – 8) + 1 + 1 = 1018 таким образом, количество значащих нулей равно 1537 – 1018 = 519 ответ: 519. Решение (программа на Python, Б.С. Михлин): если доступна среда программирования на Python, можно написать программу, которая использует встроенную арифметику длинных чисел: x = 4**512 + 8**512 - 2**128 - 250 print( bin(x)[2:].count('0') ) ответ: 519. Ещё пример задания:Р-20. Сколько единиц в двоичной записи числа 42015 + 8405 – 2150 – 122 Решение (способ Е.А. Смирнова, Нижегородская область): приведём все числа к степеням двойки, учитывая, что 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 вспомним, число 2N–2K при K < N записывается как N–K единиц и K нулей: для того чтобы использовать это свойство, нам нужно представить заданное выражение в виде пар вида 2N–2K, причём в этой цепочке степени двойки нужно выстроить по убыванию в нашем случае вы выражении 24030 + 21215 – 2150 – 27 + 22 + 21 стоит два знака «минус» подряд, это не позволяет сразу использовать формулу используем теперь равенство , так что – 2150 = – 2151 + 2150; получаем 24030 + 21215 – 2151 + 2150 – 27 + 22 + 21 здесь две пары 2N–2K , а остальные слагаемые дают по одной единице общее число единиц равно 1 + (1215 – 151) + (150 – 7) + 1 + 1 = 1210 ответ: 1210. Решение (С.О. Куров, Москва): приведём все числа к степеням двойки, учитывая, что 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 ищем в разности крайнюю левую степень двойки и крайнюю правую 21215 – 27, при этом 2150 на время «теряем» определяем количество единиц в разности 21215 – 27, получаем 1215 – 7 = 1208 единиц так как «внутри» этой разности есть еще 2150, то просто вычитаем одну единицу: 1208 – 1 = 1207; итого в разности 21215 – 2150 – 27 ровно 1207 единиц осталось прибавить по одной единицы от чисел 24030, 22, 21 Ответ: 1210 Решение (программа на Python, Б.С. Михлин): используется встроенная «длинная арифметика» в Python: x = bin( 4**2015 + 8**405 - 2**150 - 122 ) print( x.count( '1' ) ) ответ: 1210. |