Пусть задано шестнадцатеричное число. Рассмотрим все шестнадцатеричные числа, которые...

0 голосов
28 просмотров

Пусть задано шестнадцатеричное число. Рассмотрим все шестнадцатеричные числа, которые можно получить из заданного перестановками цифр (при этом перестановки, в которых на первом месте оказывается 0, из рассмотрения исключаются, а исходное число, наоборот, включается). Для каждого такого числа считаем остаток от его деления на 5. Требуется найти среднее арифметическое таких остатков всех рассматриваемых чисел. Формат ввода Входные данные содержат одно шестнадцатеричное число, состоящее из не более чем 20 знаков. Цифры, большие 9, обозначаются строчными латинскими буквами от ‘a’ до ‘z’. Гарантируется, что первой цифрой числа не является 0. Формат вывода Выведите среднее арифметическое остатков от деления всех корректных (то есть не имеющих ведущих нулей) чисел, образованных перестановками цифр в данном числе, от деления на 5, с точностью не хуже 10−9. Пример 1ВводВывод222 1Пример 2ВводВыводaaa 0


Информатика (26 баллов) | 28 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Решение задачи будет гораздо проще, если заметить, что остаток от деления шестнадцатеричного числа на 5 совпадает с остатком от деления на 5 его суммы цифр.

Действительно, доказываем по индукции:

  • Для числа из одной цифры это тривиально: число из одной цифры совпадает со своей суммой цифр.
  • Переход: пусть число из k цифр ...xyz дает такой же остаток при делении на 5, что и сумма цифр ... + x + y + z. Покажем, что число из (k + 1) цифры ...xyzt дает такой же остаток, что и сумма цифр ... + x + y + z + t: ...xyzt = 16 * ...xyz + t = 15 * ...xyz + (...xyz + t). Первое слагаемое делится на 5, второе по предположению дает такой же остаток, что и (... + x + y + z) + t, что и требовалось.

У любой перестановки сумма цифр такая же, так что и остатки от деления на 5 совпадают. Так что осталось найти сумму цифр исходного числа и найти остаток от деления её на 5, это и будет ответом.

Python 3:

digits = "0123456789abcdef"

n = input()

s = sum(digits.index(digit) for digit in n)

print(s % 5)


(148k баллов)