Задание:
Операнды арифметического выражения записаны в системе счисления с основанием 19.
98897x2119 + 2x92319
В записи чисел переменной x обозначена неизвестная цифра из алфавита 19-ричной системы счисления. Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 18. Для найденного x вычислите частное от деления значения арифметического выражения на 18 и укажите его в ответе в десятичной системе счисления. Основание системы счисления указывать не нужно
Решение задания в Python (использование функции int):
digits = "0123456789ABCDEFGHI"
print("x quotient")
for x in digits:
s = int("98897" + x + "21", 19) + int("2" + x + "923", 19)
if s % 18 == 0:
print(x, s // 18)
Вывод программы:
x quotient
6 469030538
F 469034148
Решение задания в Python (полиномиальное представление чисел):
print("x quotient")
for x in range(19):
s = (9*19**7 + 8*19**6 + 8*19**5 + 9*19**4 + 7*19**3 + x*19**2 + 2*19 + 1) + (2*19**4 + x*19**3 + 9*19**2 + 2*19 + 3)
if s % 18 == 0:
print(x, s // 18)
Вывод программы:
x quotient
6 469030538
F 469034148
Ответ: 469034148
Объяснение:
В первой строке первого варианта решения в переменную digits записаны цифры 19-ричной системы счисления: 10 цифр десятичной системы счисления от 0 до 9 и 9 первых букв английского алфавита от A до I.
Проблема при формировании строки возможных цифр 19-ричной системы счисления заключается в том, что ученики зачастую не помнят английский алфавит, количество и порядок букв в нём. Помочь в решении этой проблемы может знание о том, что максимальная цифра любой позиционной системы счисления на единицу меньше основания данной системы счисления, и функция int, осуществляющая перевод заданной первым аргументом строки из заданной вторым аргументом системы счисления в десятичную систему счисления. Если буква I выступает в роли последней цифры 19-ричной системы счисления, то команда print(int("I", 19)) выведет значение 18 по аналогии с тем, как для 16-ричной системы счисления команда print(int("F", 16)) выведет значение 15.
Таким образом, буквы, используемые в заданной системе счисления, можно подобрать на экзамене с помощью функции int. Во второй строке программы выведена шапка для простоты восприятия последующей таблицы: print("x quotient"). Слово «quotient» переводится с английского языка как «частное, отношение, результат деления». В третьей строке программы с помощью цикла for производится перебор всех значений переменной x, в которую последовательно присваиваются символы-цифры из строки digits. Говорят, что цикл for x in digits осуществляет итерирование по строке.
В теле цикла 19-ричные числа 98897x2119 и 2x92319 с помощью функции int преобразуются в десятичную систему счисления и суммируются:
s = int("98897" + x + + "21", 19) + int("2" + x + + "923", 19)
Первым аргументом функций int служат строки, представляющие записи чисел в 19-ричной системе счисления, второй аргумент функций int, равный 19, является основанием системы счисления, из которой осуществляется перевод в десятичную систему счисления. Необходимо заметить, что максимальным основанием системы счисления для функции int является 36. При основании системы счисления большем 36 необходимо представлять заданные числа как полиномы для их перевода в десятичную систему счисления:
s = (9*19**7 + 8*19**6 + 8*19**5 + 9*19**4 + 7*19**3 + x*19**2 + 2*19 + 1) + (2*19**4 + x*19**3 + 9*19**2 + 2*19 + 3)
при этом значения переменной x нужно перебирать в виде: for x in range(19), где 19 – основание системы счисления, в данном случае в переменную x присваиваются не 19-ричные цифры, а их десятичные представления – десятичные числа от 0 до 18.
В случае если значение полученной суммы кратно 18, происходит вывод значения переменной x и искомого частного от деления значения арифметического выражения на 18:
if s % 18 == 0:
print(x, s // 18)
В данном задании требовалось найти частное для наибольшего значения x, поэтому в качестве ответа необходимо выбрать последнее подходящее частное.