В этом задании вам дадут A (длиной менее 10000 цифр) и B (менее 2 ^ 64), и вам нужно будет вычислить последнюю цифру (A · A · A · ... ... A (B раз) )).
Входы A и B даны в одной строке, разделенной пробелом; входы заканчиваются EOF.
вход
34543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222 22337254775808
38758436543765743875437656358764347568437658743658743454354645645543532487548758475847684756897548758457843758437584758478574857438758436587436587436587643875643856783478743658743658764387564387564378658437658743658743687564387564387564765746576475647564756475465746574675647654765476547534587545689475689748574385743765874585743857843765893748643587438957458754376543265874387564384764367584375874758943267632487564357 54545454123
6777744348435743587643756438765436574587564354375674365645643675 23232
3875843654376574357 54545454
Выход
6
3
5
9
Ограничения
- Не используйте никакие встроенные функции или перегруженные операторы для вычисления A B (вам вообще не нужно это вычислять).
- Самое короткое решение побеждает!
Ответы:
J - 52 символа
Проходит все указанные тесты, но только если удаляются завершающие пробелы на третьем входе (я предполагаю, что это было непреднамеренно).
Решение будет работать в j602 в режиме консоли (например, в терминале, в emacs j-shell и т. Д.). Это не будет работать в j701 (нет
wd
).Объяснение и математику:
«Магическое число» 12 - это LCM длин таблиц «последней цифры», найденных в других ответах. Все цифры повторяются с периодами 1, 2, 3 или 4, поэтому они также повторяются с периодом 12. Добавление двенадцати к этому исправляет случаи, когда b mod 12 = 0. Мое решение вычисляет (Последняя цифра A) ^ (12+ (B mod 12)), давая номер с той же последней цифрой. (Я рассматривал подлое сломанное решение, исключающее три символа «12 +», например, используя B mod 96, где нет примеров столкновения ...)
источник
Питон
125107 символовO (1) решение
источник
GolfScript 21
Это в основном вычисляет,
A^C mod 10
где C находится в диапазоне[1,4]
иC mod 4 = B mod 4
, кроме случаев, когда B равно 0, тогда C также равно 0.Это сокращение возможно, потому что
A^(B+4) mod 10 = A^B mod 10
для любого неотрицательного целого числа A и положительного целого числа B.источник
J, 79
источник
Рубин,
97937271676160Также обрабатывает случай, когда b == 0.
Думаю, на самом деле хуже использовать справочную таблицу.
источник
2 5
качестве ввода и даже не дает правильного вывода для примеров выше. ideone.com/2cOPyWindows PowerShell, 85
O (1) решение. Получил подсказку от решения Ruby от Lowjacker's ;-)
источник
Python 149 символов
источник
Питон (
119134109)Я верю, что запрет на встроенные функции не распространяется на ввод-вывод.
Редактировать: удалить использование оператора возведения в степень Python.
Изменить: Заменены троичные операторы с короткозамкнутыми логическими операторами.
источник
Питон 3к
121 символВ
(a*a)%10
этом нет необходимости, но это ускоряет его, поэтому решил оставить его.Изменить: Видимо, скобки не обязательны.
Между тем, думая о
O(1)
решении. :)источник
Javascript (
117847960 символов)Достигнуто 60 символов с предложенными улучшениями от @JiminP и @NoOneIsHere. Спасибо!
d = function (s, n) {a = Math.pow (s [s.length-1], n% 4 == 0? 1: n% 4) + ''; вернуть a [a.length-1] }Тестировать:
Результаты:
источник
d=function(s,n){return(Math.pow(s.slice(-1),n%4||1)+'').slice(-1)}
: Pd=s,n=>(Math.pow(s.slice(-1),n%4||1)+'').slice(-1)
или использовать=>
вообще?