In der Mathematik ist die Tetration der nächste Hyperoperator nach der Exponentiation und wird als iterierte Exponentiation definiert.
Zusatz ( a gelungen n - mal)
Multiplikation ( a addiert zu sich selbst, n - mal)
Potenzierung ( a multipliziert mit sich selbst, n- mal)
Tetration ( eine von sich selbst potenzierte , n- mal)
Die inversen Tetrationsbeziehungen werden als Superwurzel und Superlogarithmus bezeichnet. Ihre Aufgabe ist es, ein Programm zu schreiben, das bei A und B die Superwurzel B nd -order von A druckt .
Zum Beispiel:
- Wenn A =
65,536
und B =4
, wird gedruckt2
- Wenn A =
7,625,597,484,987
und B =3
, wird gedruckt3
A und B sind positive ganze Zahlen und das Ergebnis muss eine Gleitkommazahl mit einer Genauigkeit von 5 Stellen nach dem Dezimalpunkt sein. Das Ergebnis gehört zur realen Domäne.
Seien Sie vorsichtig, Superwurzeln können viele Lösungen haben.
Antworten:
C - Aus Gründen der Klarheit wurde nicht versucht, den Code zusammenzudrücken
Berücksichtigung der Eingabe:
Dann sollte es normalerweise nur eine Lösung in ℝ geben, was das Problem erheblich vereinfacht.
Code ist:
Kompilieren:
Laufen:
Z.B:
4 2
3 3
3 π
n (2 ½ ) ➙ 2 als n ➙ ∞? (bekannte Grenze)
Ja!
n (e 1 / e ) ➙ ∞ als n ➙ ∞? (Obergrenzen)
Cool! (e 1 / e ≅ 1.44466786101 ...)
quelle
Python, 87 Zeichen
Eine einfache lineare Suche nach der Antwort.
Off-Topic, aber was ist mit dem Python-
**
Operator * # $ (@!) ?quelle
(1e200)**2
mit1e(200**2)
?OverflowError
im ersten Fall eine zu generieren .Mathematica,
3540Erzeugt eine Liste aller Lösungen mit 5-stelliger Genauigkeit.
5 weitere Zeichen, um nur die echte Lösung zu erhalten, die die aktualisierten Regeln verlangen.
quelle
Julia
Ignorierte Gleitkommaanweisung, da die Frage nur das Verhalten für Ganzzahlen definiert.
quelle
Wann wurde dies ein Code Golf? Ich dachte, es wäre eine Code-Herausforderung, den besten Algorithmus zu finden!
Code-Golf
APL, 33 Zeichen
Dies ist eine einfache lineare Suche, die von C = 1 + 10 -6 ausgeht und um 10 -6 erhöht wird, bis
log C log C log C ⋯ A ≤ 1,
wobei die log C- Funktion B-mal rekursiv angewendet wird.
Beispiele
Dieser Code ist sehr langsam, aber für kleine Basen wie 2 oder 3 ist er in wenigen Sekunden fertig. Siehe unten für eine bessere Sache.
Code-Herausforderung
APL, logarithmische Komplexität
Tatsächlich lineare Komplexität in der Stammreihenfolge, logarithmisch in Bezug auf Ergebnisgröße und Genauigkeit:
Zeit = O (B × log (C) + B × log (D))
Dabei ist B die Grundreihenfolge, C die angeforderte Tetrationsbasis und D die Anzahl der angeforderten Genauigkeitsziffern. Diese Komplexität ist mein intuitives Verständnis, ich habe keinen formalen Beweis erbracht.
Dieser Algorithmus erfordert keine großen Ganzzahlen, sondern verwendet die Protokollfunktion nur für reguläre Gleitkommazahlen. Daher ist er für sehr große Zahlen bis zur Grenze der Gleitkommaimplementierung (entweder doppelte Genauigkeit oder beliebig große FP-Zahlen auf der.) Sehr effizient APL-Implementierungen, die sie anbieten.)
Die Genauigkeit des Ergebnisses kann durch Einstellen
⎕CT
(Vergleichstoleranz) auf den gewünschten akzeptablen Fehler gesteuert werden (auf meinem System ist der Standardwert 1e ¯ 14, ungefähr 14 Dezimalstellen).Ich bin nicht sicher, ob
1≥⍵⍟⍣n
oben ein Domänenfehler fehlschlagen könnte (da das Protokoll eines negativen Arguments entweder sofort fehlschlagen oder ein komplexes Ergebnis liefern könnte, das nicht in der Domäne von liegt≥
), aber ich konnte es nicht finden ein Fall, der fehlschlägt.Beispiele
'3' wird als exakter Wert ausgegeben, da es sich zufällig um einen der Werte handelt, die direkt von der binären Suche getroffen werden (beginnend mit 2, verdoppelt auf 4, halbiert auf 3). In dem allgemeinen Fall, in dem dies nicht der Fall ist, nähert sich das Ergebnis dem Wurzelwert mit einem ⎕CT-Fehler an (genauer gesagt, der logarithmische Test jeder Kandidatenbasis wird mit ⎕CT-Toleranz durchgeführt.)
quelle
Ruby, 79 Bytes
Dies ist das gleiche wie das folgende Programm, jedoch weniger genau, da nur 99 Schleifen ausgeführt werden.
Ruby, 87 Bytes
Probieren Sie es online aus
Dies ist einfach eine Halbierung. Ungolfed:
quelle
k [52 Zeichen]
Eine modifizierte Version meiner eigenen Beitrag n - te Wurzel
Beispiel:
quelle
Haskell
Einfache lineare Suche, gibt zuerst zurück, kleinste gefundene Übereinstimmung.
Beispiel
quelle
Mathematica, 41 Bytes ohne Optimierung
Mathematica wurde im Grunde erfunden, um solche Probleme zu lösen. Eine einfache Lösung besteht darin, das Problem als verschachtelte Potenzreihe zu konstruieren und an die integrierte
Reduce
Funktion zu übergeben, die nach analytischen Lösungen für Gleichungen sucht. Infolgedessen ist das Folgende nicht nur ungewöhnlich prägnanter Code, sondern auch keine rohe Gewalt.Sie können die Einschränkung aufheben, um nur Lösungen mit reellen Zahlen bereitzustellen, wenn Sie geduldig sind und sechs Bytes sparen möchten. Sie können einige der verschachtelten Funktionen auch in Kurzform ausdrücken, um einige weitere Bytes zu sparen. Wie gegeben, kehrt es so zurück
quelle
05AB1E , 16 Bytes
Port der Python-Antwort von @KeithRandall .
Probieren Sie es online aus.
Erläuterung:
ÐU²FXm}
könnte auchD²>и.»m
für die gleiche Byteanzahl sein:quelle