ЕГЭ по информатике 2021 года проводилось в компьютерном режиме, что позволяло использовать среду программирования. Рассмотрим решение типовых задач 14 задания, связанных с системами счисления, на языке Python. Python, благодаря своей простоте и лаконичности, хорошо подходит для решения подобных задач на экзамене.
Извлечение цифр из числа в произвольной системе счисления
Для извлечения последней цифры числа в любой системе счисления используется деление с остатком на основание системы счисления. Например, для числа 435 в десятичной системе счисления:
- Деление на 10 с остатком: 435 / 10 = 43 (целая часть) и 5 (остаток). Остаток 5 — это последняя цифра.
- Для удаления последней цифры берётся целая часть от деления на 10: 43.
Этот подход применим к любой системе счисления: для извлечения последней цифры в восьмеричной системе используется деление с остатком на 8, в шестнадцатеричной — на 16 и т.д.
Задачи на системы счисления
Далее представлены задачи с решениями на Python.
Задача 1: Подсчет единиц в двоичной записи числа
Условие: Сколько единиц в двоичной записи числа 4<sup>2014</sup> + 2<sup>2015</sup> — 8?
Решение:
x = 4**2014 + 2**2015 - 8
k = 0
while x > 0:
if x % 2 == 1:
k += 1
x //= 2
print(k) # Результат: 2013
Программа перебирает число, извлекая последнюю цифру двоичной записи (с помощью x % 2) и проверяет, равна ли она 1. Если да, счетчик k увеличивается. Затем последняя цифра отрезается (с помощью целочисленного деления x //= 2). Цикл продолжается до тех пор, пока число не станет равным 0.
Задача 2: Подсчет цифр 5 в шестеричной записи числа
Условие: Сколько цифр 5 содержится в шестеричной записи числа 367 + 619 — 18?
Решение:
x = 367 + 619 - 18
k = 0
while x > 0:
if x % 6 == 5:
k += 1
x //= 6
print(k) # Результат: 12
Аналогично предыдущей задаче, только здесь мы работаем с шестеричной системой счисления, поэтому используем деление с остатком на 6 и проверяем равенство остатка 5.
Задача 3: Подсчет цифр 0 в девятеричной записи числа
Условие: Сколько цифр 0 содержится в девятеричной записи числа (729<sup>41</sup> — 81<sup>16</sup>) * (729<sup>15</sup> + 9<sup>5</sup>)?
Решение:
x = (729**41 - 81**16) * (729**15 + 9**5)
k = 0
while x > 0:
if x % 9 == 0:
k += 1
x //= 9
print(k) # Результат: 77
Здесь используется деление с остатком на 9 и проверка на равенство остатка 0.
Задача 4: Подсчет различных цифр в восьмеричной записи числа
Условие: Сколько различных цифр в восьмеричной записи числа 2<sup>102</sup> + 2<sup>100</sup> + 2<sup>85</sup> + 2<sup>18</sup>?
Решение:
x = 2**102 + 2**100 + 2**85 + 2**18
s = []
while x > 0:
s.append(x % 8)
x //= 8
print(len(set(s))) # Результат: 4
В этом случае мы используем список s для хранения цифр восьмеричной записи. После завершения цикла список преобразуется в множество set(s) для удаления дубликатов, а затем вычисляется длина множества — количество различных цифр.
Задача 5: Определение основания системы счисления
Условие: В системе счисления с некоторым основанием десятичное число 18 записывается как 30. Укажите основание.
Решение:
for i in range(4, 101):
if int('30', i) == 18:
print(i) # Результат: 6
Программа перебирает возможные основания системы счисления (начиная с 4, так как в числе присутствует цифра 3) и использует функцию int(’30’, i) для преобразования числа 30 из системы счисления с основанием i в десятичную систему.
Задача 6: Решение уравнения в разных системах счисления
Условие: Решите уравнение 121<sub>x+1</sub> = 101<sub>7</sub>.
Решение:
for x in range(1, 31):
if (1 * (x + 1)**2 + 2 * (x + 1) + 1) == (1 * 7**2 + 0 * 7 + 1):
print(x) # Результат: 6
Левая часть уравнения преобразуется в десятичную систему счисления, а правая часть уже записана в десятичной системе. Программа ищет значение x, при котором левая и правая части равны.
Задача 7: Нахождение чисел с одинаковыми последними двумя цифрами в троичной записи
Условие: Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 17, запись которых в троичной системе счисления оканчивается на две одинаковые цифры.
Решение:
for i in range(1, 18):
t = i
a = t % 3
t //= 3
b = t % 3
if a == b:
print(i, end=", ")
# Результат: 1, 4, 7, 10, 13, 16,
Программа перебирает числа от 1 до 17, извлекает последние две цифры троичной записи и проверяет их на равенство.
Задача 8: Нахождение оснований систем счисления, где число оканчивается на 2
Условие: Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 23 оканчивается на 2.
Решение:
for i in range(3, 24):
if 23 % i == 2:
print(i, end=", ")
# Результат: 3, 7, 21,
Программа перебирает возможные основания, начиная с 3 (так как остаток 2 меньше основания), и проверяет условие 23 % i == 2.
Представленные примеры демонстрируют эффективное использование Python для решения задач 14 задания ЕГЭ по информатике, связанных с системами счисления. Использование циклов и арифметических операций позволяет автоматизировать процесс вычислений и значительно сокращает время решения.