In dieser Aufgabe erhalten Sie A (weniger als 10000 Stellen lang) und B (weniger als 2 ^ 64), und Sie müssen die letzte Stelle von (A · A · A · ... · A (B-mal) berechnen )).
Die Eingaben A und B werden in einer einzelnen Zeile angegeben, die durch ein Leerzeichen getrennt ist. Die Eingaben werden von EOF abgeschlossen.
Eingang
34543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222345432323213232432424345445334453434324343111122234543232321323243242434544533445343432434311112223454323232132324324243454453344534343243431111222 22337254775808
38758436543765743875437656358764347568437658743658743454354645645543532487548758475847684756897548758457843758437584758478574857438758436587436587436587643875643856783478743658743658764387564387564378658437658743658743687564387564387564765746576475647564756475465746574675647654765476547534587545689475689748574385743765874585743857843765893748643587438957458754376543265874387564384764367584375874758943267632487564357 54545454123
6777744348435743587643756438765436574587564354375674365645643675 23232
3875843654376574357 54545454
Ausgabe
6
3
5
9
Einschränkungen
- Verwenden Sie keine eingebauten Funktionen oder überladenen Operatoren , um A B zu berechnen (das müssen Sie eigentlich gar nicht berechnen).
- Kürzeste Lösung gewinnt!
Antworten:
J - 52 Zeichen
Besteht alle angegebenen Tests, allerdings nur, wenn die nachgestellten Leerzeichen in der dritten Eingabe entfernt wurden (ich vermute, dass dies unbeabsichtigt war).
Die Lösung funktioniert in j602 im Konsolenmodus (z. B. in Terminal, Emacs-J-Shell usw.). In j701 (nein
wd
) funktioniert es nicht .Erklärung & Mathematik:
Die "magische Zahl" 12 ist die LCM der Längen der "letzten Ziffer" -Tabellen, die in den anderen Antworten gefunden wurden. Alle Ziffern wiederholen sich mit den Punkten 1, 2, 3 oder 4, so dass sie sich auch mit Punkt 12 wiederholen. Durch Addition von zwölf werden Fälle behoben, in denen b mod 12 = 0. Meine Lösung berechnet (letzte Ziffer von A) ^ (12+ (B mod 12)) eine Zahl mit der gleichen letzten Ziffer. (Ich habe eine hinterhältige Lösung in Betracht gezogen, bei der die drei Zeichen '12 + 'entfernt wurden, indem zB B mod 96 verwendet wurde, bei dem wahrscheinlich keine Beispiele kollidieren ...)
quelle
Python
125107 ZeichenO (1) -Lösung
quelle
GolfScript 21
Dies berechnet im Grunde genommen,
A^C mod 10
wo C im Bereich liegt,[1,4]
undC mod 4 = B mod 4
wenn B nicht 0 ist, dann ist C auch 0.Diese Abkürzung ist möglich, weil
A^(B+4) mod 10 = A^B mod 10
für jede nicht negative ganze Zahl A und positive ganze Zahl B.quelle
J 79
quelle
Ruby,
97937271676160Behandelt auch den Fall, in dem b == 0 ist.
Schätze, es ist tatsächlich schlimmer, eine Nachschlagetabelle zu verwenden.
quelle
2 5
Eingabe und gibt nicht einmal die korrekte Ausgabe für die obigen Beispielfälle. ideone.com/2cOPyWindows PowerShell, 85
O (1) -Lösung. Ein Hinweis aus Lowjackers Ruby-Lösung ;-)
quelle
Python 149 Zeichen
quelle
Python (
119134109)Ich vertraue darauf, dass das Verbot von integrierten Funktionen nicht für E / A gilt.
Bearbeiten: Entfernen Sie die Verwendung des Python-Potenzierungsoperators.
Bearbeiten: Ternäre Operatoren durch kurzgeschlossene boolesche Operatoren ersetzt.
quelle
Python 3k
121 ZeichenDas
(a*a)%10
ist nicht notwendig, aber es beschleunigt es, also entschied man sich, es zu behalten.Bearbeiten: Anscheinend sind die Klammern nicht erforderlich.
In der Zwischenzeit über die
O(1)
Lösung nachzudenken . :)quelle
Javascript (
117847960 Zeichen)Erreicht 60 Zeichen mit den vorgeschlagenen Verbesserungen von @JiminP und @NoOneIsHere. Vielen Dank!
d = Funktion (s, n) {a = Math.pow (s [Länge-1], n% 4 == 0? 1: n% 4) + ''; Rückgabe a [Länge-1] }Zu testen:
Ergebnisse:
quelle
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)
oder überhaupt nicht verwenden=>
?