Последняя цифра супер-удара

тема: Теория чисел (НОД, НОК, остатки) · уровень: средний

Условие

В игре есть «супер-удар»: если у героя базовая сила равна a, а комбо собрано длиной b, то в журнал боя записывают число a^b.

Дизайнеру важна только последняя цифра этого числа (чтобы рисовать красивую анимацию), но сами числа могут получаться огромными.

Считайте последнюю цифру a^b.

Важно: в этой игре считается, что 0^0 = 1 (пустое комбо не меняет силу).

Формат ввода

Одной строкой даны два целых числа a и b.

Формат вывода

Выведите одну цифру — последнюю цифру числа a^b.

Ограничения

Пример

Ввод:

7 256

Вывод:

1

Как решать — идея подхода

Приём: Циклы последней цифры (mod 10)

Ключевое наблюдение: последняя цифра a^b зависит только от a % 10, потому что умножение по модулю 10 «видит» лишь последнюю цифру. А степени по модулю 10 быстро входят в цикл длиной 1, 2 или 4.

Почему это работает: возможных последних цифр всего 10, и при умножении по модулю 10 последовательность d, d^2, d^3, ... (mod 10) неизбежно повторится. Для цифр 0–9 эти циклы известны и очень короткие.

План:

Сложность: O(1) по времени и памяти.

Частая ошибка: забыть про сдвиг на 1 в индексе. Если написать b % k, то для b = k попадёте в начало цикла, хотя нужен последний элемент; правильно idx = (b - 1) % k.

Разберись руками

Нужно узнать последнюю цифру числа 7^256, не вычисляя само огромное число. Идея: смотреть только на последнюю цифру при каждом умножении на 7.

Идея: Чтобы найти последнюю цифру большой степени, достаточно смотреть только на последние цифры: они начинают повторяться по циклу. Сначала выписываешь цикл для нужной последней цифры основания, потом по остатку от деления степени на длину цикла выбираешь нужный элемент. Отдельно помни: при степени 0 результат считается 1 (в том числе 0^0).

Решить задачу с автопроверкой на Python →

Куда дальше