Twoim zadaniem jest powoli obliczyć potęgowanie, wykonując następujące czynności:
Biorąc pod uwagę dwa dane wejściowe (w tym przykładzie 4 i 8), musisz obliczyć potęgowanie obliczając równanie bit po bicie. Zrobiłbyś to 4^8
, mając większą wartość podstawową (4) i mniejszy wykładnik (8). Możesz to zrobić, stosując większe potęgowanie i dzielenie. Możesz podzielić wykładnik wykładniczy przez wartość X (pod warunkiem, że X jest głównym dzielnikiem wykładnika wykładniczego) i zrobić wartość podstawową ( B ) B^X
. Na przykład możesz wykonać:
4^8 = (4 ^ 2)^(8 / 2) = 16^4
W poprzednim równaniu zamieniłem X na 2.
Możesz 16^4
jeszcze bardziej uprościć , ponownie X = 2
:
16^4 = (16 ^ 2)^(4 / 2) = 256^2
A następnie w końcu obliczyć liczbę (ponownie X = 2
):
256^2 = (256 ^ 2)^(2 / 2) = 65536^1 = 65536
W związku z tym,
4^8 = 16^4 = 256^2 = 65536
To wynik, który powinieneś dać. Separator wyjściowy jest trochę elastyczny, na przykład możesz rozdzielić równania nowymi liniami lub spacjami zamiast =
. Lub możesz umieścić je na liście (ale nie wolno używać cyfry lub ^
znaku jako separatora).
Jak zauważył Martin Ender, ^
jest również elastyczny. Na przykład możesz użyć [A, B]
lub A**B
zamiast A^B
w danych wyjściowych.
X może być tylko liczbą pierwszą, co oznacza, że nie można użyć, X = 8
aby przejść bezpośrednio do rozwiązania, a wartości X będą jedynie czynnikami pierwszymi drugiego wejścia (wykładnika).
Przykłady:
(input) -> (output)
4^8 -> 4^8=16^4=256^2=65536
5^11 -> 5^11=48828125
2^15 -> 2^15=32^3=32768 (2^15=8^5=32768 is also a valid output)
Pamiętaj, że format wejściowy jest również elastyczny (np. Możesz wziąć A \n B
lub A B
zamiast niego A^B
. Oczywiście nie stanowiłoby to problemu, gdybyś napisał funkcję z dwoma argumentami.
W drugim przykładzie przechodzimy od razu do obliczeń, ponieważ 11
jest to liczba pierwsza i nie możemy zrobić więcej kroków.
Możesz napisać program lub funkcję, aby rozwiązać ten problem i odpowiednio wydrukować lub zwrócić wartość.
Ponieważ jest to kod-golf , ten najkrótszy kod wygrywa!
32^3
i8^15
nie są też 512.x^1
?Odpowiedzi:
Galaretka , 16 bajtów
Wypróbuj online!
Dane wejściowe to pojedyncza lista
[base, exponent]
. Zwracana wartość dolnego łącza monadycznego jest listą, ponieważ jako pełny program drukowana jest reprezentacja tej listy, na przykład2^15=8^5=32768^1
drukowana jako:W jaki sposób?
Może być sformatowany jako siatka na 2 bajty przez końcowe
µG
, np .:... lub w pełni sformatowany, w tym przycinanie
^1
, dla 9, z końcemj€”^j”=ṖṖ
, np .:źródło
JavaScript (ES7), 55 bajtów
Używa
,
zamiast=
(2^15,8^5,32768
).Przypadki testowe
Pokaż fragment kodu
Uwaga: fragment używa
Math.pow
zamiast**
kompatybilności z różnymi przeglądarkami.źródło
05AB1E ,
232217 bajtówZapisano 5 bajtów, zauważając elastyczny format wyjściowy.
Wypróbuj online!
Wyjaśnienie
Przykład dla
2^15
źródło
C,
125123 + 4 (-lm
) =129127 bajtówPobiera podwójną i całkowitą.
Wypróbuj online!
źródło
Haskell, 64 bajty
Przykład użycia:
2 # 32
->[[2,32],[4,16],[16,8],[256,4],[65536,2],[4294967296]]
. Wypróbuj online! .Jak to działa:
źródło
Narzędzia Bash + GNU, 82
Skrypt powłoki rekurencyjnej. Wydaje się, że to nie działa w TIO, ale działa dobrze po zapisaniu jako skrypt i wykonaniu:
źródło