Последняя цифра супер-удара
Условие
В игре есть «супер-удар»: если у героя базовая сила равна a, а комбо собрано длиной b, то в журнал боя записывают число a^b.
Дизайнеру важна только последняя цифра этого числа (чтобы рисовать красивую анимацию), но сами числа могут получаться огромными.
Считайте последнюю цифру a^b.
Важно: в этой игре считается, что 0^0 = 1 (пустое комбо не меняет силу).
Формат ввода
Одной строкой даны два целых числа a и b.
Формат вывода
Выведите одну цифру — последнюю цифру числа a^b.
Ограничения
0 ≤ a ≤ 10^90 ≤ b ≤ 10^9- В некоторых языках для таких задач обычно нужен 64-битный тип (int64), но в Python это не проблема.
Пример
Ввод:
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 эти циклы известны и очень короткие.
План:
- Если
b == 0, ответ всегда1(в том числе по правилу игры0^0 = 1). - Найти
d = a % 10. - Если
dв{0,1,5,6}, то последняя цифра не меняется при возведении в степень: ответ сразуd. - Иначе взять соответствующий цикл:
- 2: [2,4,8,6], 3: [3,9,7,1], 4: [4,6], 7: [7,9,3,1], 8: [8,4,2,6], 9: [9,1]
- Выбрать элемент по индексу
idx = (b - 1) % len(cycle)и вывестиcycle[idx].
Сложность: O(1) по времени и памяти.
Частая ошибка: забыть про сдвиг на 1 в индексе. Если написать b % k, то для b = k попадёте в начало цикла, хотя нужен последний элемент; правильно idx = (b - 1) % k.
Разберись руками
Нужно узнать последнюю цифру числа 7^256, не вычисляя само огромное число. Идея: смотреть только на последнюю цифру при каждом умножении на 7.
- Построим руками последние цифры степеней 7. Старт: последняя цифра 7^1 — это 7. Дальше каждый раз: умножь текущую последнюю цифру на 7 и возьми только последнюю цифру результата. Заполни состояния после каждого шага.
- Цикл последних цифр для 7 тут длиной 4 (7, 9, 3, 1). Найди остаток от деления 256 на 4: 256 % 4 = ?
- Цикл по степеням такой: 1-я→7, 2-я→9, 3-я→3, 4-я→1. Раз у нас «конец цикла» (как 4-я позиция), какая последняя цифра у 7^256?
Идея: Чтобы найти последнюю цифру большой степени, достаточно смотреть только на последние цифры: они начинают повторяться по циклу. Сначала выписываешь цикл для нужной последней цифры основания, потом по остатку от деления степени на длину цикла выбираешь нужный элемент. Отдельно помни: при степени 0 результат считается 1 (в том числе 0^0).
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- БВИ по олимпиадам: в какие вузы берут — правила приёма вузов, разобранные построчно, со ссылкой на приказ у каждой строки
- Перечневые олимпиады: что это и что дают — весь перечень Минобрнауки: уровни, срок диплома, разрезы по предметам и классам