1729, bekannt als die Hardy-Ramanujan-Zahl , ist die kleinste positive Ganzzahl, die auf zwei Arten als Summe von zwei Würfeln positiver Ganzzahlen ausgedrückt werden kann ( 12^3+1^3=10^3+9^3=1729
). Wenn Sie eine Ganzzahl angeben n
(als Eingabe in einer beliebigen Form, die für Ihre Sprache Ihrer Wahl natürlich ist), finden Sie die kleinste positive Ganzzahl, die als Summe von zwei positiven Ganzzahlen ausgedrückt werden kann, die n
auf zwei einzigartige Arten nach der Potenz angehoben werden. Keine Verwendung externer Quellen. Die wenigsten Charaktere gewinnen.
Beachten Sie, dass dies tatsächlich ein ungelöstes Problem für ist n>4
. Lassen Sie für diese Zahlen Ihr Programm für immer auf der Suche laufen, oder versuchen Sie es nicht mehr! Stellen Sie sicher, dass das Programm das Problem löst, wenn Sie unendlich viel Zeit und Ressourcen zur Verfügung haben.
quelle
n
th-Potenz angehoben werden". Ansonsten ist91
(nicht1729
) die Lösung fürn=3
, da6^3+(−5)^3=4^3+3^3=91
. Ich habe dies über Ihren Wikipedia-Link erfahren. Vielleicht macht Ihre HM-Referenz dies aus konventionellen Gründen unnötig. Prost!1
ist die erste Lösung:1 = cbrt(0.5)^3 + cbrt(0.5)^3 = ...
Antworten:
APL
4541Kürzere aber langsamere Version von 41 Zeichen:
Sie können es online ausprobieren , indem Sie die Funktion einfügen und mit einer Zahl aufrufen:
(Der Algorithmus ist jedoch ziemlich dumm. Erwarten Sie nicht, dass der Online-Interpreter n = 4 berechnet.)
Die Antwort für n = 2 ist 50 = 5² + 5² = 7² + 1², weil es sich um eine Zahl handelt, die "als die Summe zweier Quadrate positiver Ganzzahlen ausgedrückt werden kann - nicht anders ausgedrückt - auf zwei Arten."
Wenn Sie die unterschiedliche Klausel, nur Änderung hinzufügen möchten
(v∘.≤v)
in(v∘.<v)
, gleiche Anzahl von Zeichen, und n = 2 wird 65:Ich besiege GolfScript? Kann nicht sein !!
quelle
Rubin, 132
Übergeben
n
als Befehlszeilenargument. Erste Zeilestdout
ist die Lösung.Optimiert für Code-Golf, nicht für Performance. (Läuft korrekt. Aber langsam. Arbeitet mehr als nötig.)
Hier ist ein längeres, etwas schnelleres C-Programm. Gleicher korrekter aber schrecklicher Algorithmus. (Ich muss wirklich mehr Theorie studieren!)
Getestet auf
n
= 2,n
= 3.C 234
Die C - Version nimmt
n
aufstdin
. Wie oben ist die erste Zeilestdout
die Lösung.quelle
GolfScript 53
Die Eingabe ist die Anfangsnummer auf dem Stapel. Die Zahl oben auf dem Stapel am Ende ist die Antwort. Ich werde das genauer erklären, wenn ich die Gelegenheit dazu bekomme.
Z.B
Das ist momentan ziemlich langsam. Es zählt auch
0
(damit 25 die Antwort istn=2
, da25=5^2+0^2=3^2+4^2
. Um nicht 0 zu zählen, fügen Sie die 2 Zeichen(;
nach dem ersten hinzu,
Um das zu finden
2 f=65
, seit65=8^2+1^2=5^2+6^2
quelle
GolfScript (30 Zeichen)
Hinweis: Dies ist recht langsam, da es eher eine Brute-Force-Suche als etwas Elegantes wie eine Prioritätswarteschlange ausführt. Das eleganteste daran ist die Wiederverwendung
N
als Untergrenze für die Suche: Dies gilt1^N + 2^N > N
für alleN
.Nimmt
N
der Stapel auf, bleibt die entsprechende Taxinummer auf dem Stapel. Zu nehmenN
von stdin, voranstellen~
.Die obige Version erlaubt
x^N + x^N
(also dafürN=2
gibt es50
). Wenn Sie eindeutige Zahlen hinzufügen möchten (65
stattdessen geben), ändern Sie den Wert3
auf4
. Um zu erlauben0^N + x^N
(zu geben25
), entfernen Sie die)
unmittelbar zuvorN?
.quelle
Mathematica, 58 Zeichen
Eine sehr sehr langsame Lösung unter Verwendung der Erzeugungsfunktion:
quelle