Es gibt eine Gleichung, vorausgesetzt n
und x
sind positiv,
das drückt die Beziehung zwischen zwei Monomen aus, wobei eines eine häufige Falschdarstellung des anderen ist. Viele Menschen machen den einfachen Fehler, diese (dh 3x^2
und (3x)^2
) gleichzusetzen .
Herausforderung
Gegeben eine positive ganze Zahl i
, bestimmt und gibt die Lösung n
und x
mit der kleinsten Summe als Array [n, x]
. Im Falle eines Unentschieden ist jeder Lösungssatz akzeptabel.
Testfälle
62658722541234765
[15, 11]
202500
[4, 15]
524288
[8, 4]
33044255768277
[13, 9]
code-golf
number-theory
Zach Gates
quelle
quelle
[x, n]
statt[n, x]
?n
undx
ganze Zahlen, richtig?[n, x]
und es gibt keine zeitliche Einschränkung @Fatalizen
undx
sind ganze Zahlen @LuisMendoAntworten:
Brachylog , 35 Bytes
Probieren Sie es online aus!
Erläuterung
Wir erstellen eine Liste
[N, X]
, in derN >= X
wir nach dem Zuweisen von Werten beide[N, X]
und[X, N]
als mögliche Ausgabe versuchen . Wenn beispielsweiseN
zugewiesen wird3
, prüfen wir durch Rückzieher[3, 1]
,[1, 3]
,[3, 2]
,[2, 3]
,[3, 3]
und[3, 3]
. Danach wird der nächste Rückverfolgungsschritt für den Wert von ausgeführtN
, zu dem4
usw.quelle
Mathematica, 61 Bytes
Dank Meilen für das Speichern von 2 Bytes plus einer ganzen Reihe von Bytes habe ich ohne Grund gezählt!
Berechnet eine Tabelle von Paaren {n, x}, wobei x = (i / n) ^ (1 / n) unter Verwendung aller möglichen Werte von n; behält nur diejenigen bei, für die das entsprechende x eine ganze Zahl ist; gibt dann das Paar mit dem größten Wert von n zurück.
Hier liegen "alle möglichen Werte von n" im Bereich von 1 bis 2 * ln (i). Dies ignoriert die Lösung {n, x} = {i, 1}, aber das ist in Ordnung, da die Lösung {n, x} = {1, i} ausreicht, wenn es die beste Wahl ist. X muss also niemals kleiner als 2 werden, was bedeutet, dass n * 2 ^ n ≤ i ist und alle diese n kleiner als 2 * ln (i) sind.
Mit Hilfe von Kalkül kann man zeigen, dass das Paar {n, x}, das in diesem Zusammenhang ihre Summe minimiert, dasselbe ist wie das Paar {n, x} mit dem größten n (ohne {i, 1}). Deshalb die Initiale
Last
gut genug, um das optimale Paar zu finden.quelle
IntegerQ@*Last
, um 2 Bytes zu speichern, aber ich zähle auch 63 nicht 86 Bytes in dieser aktuellen Version.MATL , 22 Bytes
Ausgänge sind
x
,n
in dieser Reihenfolge.Die Eingabe wird durch den Standarddatentyp von MATL begrenzt
double
, der2^53
nur Ganzzahlen bis zu genau darstellen kann . Dies schließt den ersten Test aus (es liefert immer noch das richtige Ergebnis, aber das kann bei so großen Eingaben im Allgemeinen nicht garantiert werden).Probieren Sie es online aus!
Erläuterung
Der Code verwendet zwei verschachtelte Schleifen:
do...while
Schleife durchläuft alle möglichen Summenn+x
in aufsteigender Reihenfolge. Die Schleife wird gestoppt, sobald eine Lösung gefunden wurde. Dies garantiert, dass wir die Lösung mit minimaler Summe ausgeben.for each
Schleife testet allesn
undx
mit dieser Summe. Wenn die Summe mit der Eingabe übereinstimmt, wird die innere Schleife verlassen und die Schleifenbedingung der äußeren Schleife wird so eingestellt,false
dass auch eine beendet wird.Kommentierter Code:
quelle
Gelee ,
2316 BytesVorausgesetzt
i
, dies erzeugt alle ganzzahligen Paare mit Ersetzung in[1, i]
. Anschließend wird die gleiche Filterung und Sortierung wie in der unten gezeigten vorherigen Lösung durchgeführt. Da es keine zeitliche Beschränkung gibt, funktioniert Brute Force bei ausreichender Zeit.Probieren Sie es online aus!, aber versuchen Sie nicht große Werte online.
Auf meinem PC dauert es ungefähr 6 Minuten, um das Ergebnis für zu berechnen
i = 2048
Verwendung der ineffizienten Version .Effiziente Version
Dies ist die vorherige Lösung für 23 Bytes, mit der die großen Werte schnell gelöst werden können.
Gegeben
i
, berechnet die Teiler voni
, um Paare von[n, x]
won
ist ein Teiler und zu erzeugenx = floor( (i/n)^(1/n) )
. Filtert es dann nach Werten, wobein * x^n == i
die verbleibenden Paare nach ihrer Summe sortiert werden und das erste Paar zurückgegeben wird.Probieren Sie es online aus! oder Überprüfen Sie alle Testfälle.
Erläuterung
quelle
PHP, 104 Bytes
Dies gibt alle möglichen Lösungen aus, die nicht im vorgeschlagenen Format 73 Bytes vorliegen
quelle
Perl, 52 Bytes
Beinhaltet +2 für
-ap
Geben Sie eine Eingabe auf STDIN
mono.pl
::Hat einige Anstrengungen unternommen, damit es auch funktioniert
1
. Ich habe keine Ahnung, ob Gleitkommafehler dazu führen können, dass dies für einige Eingaben die falsche Antwort zurückgibt.quelle