ЦУЙУ. Позиционные системы счисления
Скачать 0.86 Mb.
|
Ещё пример задания:Р-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. Ещё пример задания:Р-19. Решите уравнение . Ответ запишите в троичной системе счисления. Основание системы счисления указывать не нужно. Решение: переведём все числа в десятичную систему счисления: собирая всё в одно уравнение получаем это уравнение имеет два решения, 6 и -8; основание системы счисления – натуральное число, поэтому ответ – 6 переводим ответ в троичную систему: 6 = 2∙31 = 203. ответ: 20. Решение (программа на Python, А.Н. Носкин): можно (но сложнее) решить задачу перебором с помощью программы: a = 1*7**2 + 0 + 1 # перевод "101" в 10-ю систему c = a - 1 # число "121" в 10-й системе for i in range(3,100):# перебираем возможные основания b = 1*i**2 + 2*i + 1 # перевод в 10-ю систему числа "121" if b == c: x = i # основание системы счисления (в 10й системе) break x3 = '' while x > 0:# перевод основания в 3-ю систему x3 += str(x%3) x //= 3 x3 = x3[::-1]# разворот числа print(x3) ответ: 20. Решение (программа на Python, Б.С. Михлин): вариант программы: for x in range( 3, 37): # среди оснований от 3 до 36 if int( '121', x ) + 1 == int( '101', 7 ): break print('в 10 c.c:', x) s = '' while x: s = str( x%3 ) + s x //= 3 print( 'Ответ в 3 с.с:', s ) ответ: 20. |