Es ist altbekannt, dass jede nicht negative ganze Zahl als die Summe von vier quadratischen ganzen Zahlen umgeschrieben werden kann. Beispielsweise kann die Zahl 1 als ausgedrückt werden . Oder im Allgemeinen gibt es für jede nicht negative ganze Zahl ganze Zahlen so dass
Joseph-Louis Lagrange hat dies im 18. Jahrhundert bewiesen und wird daher oft als Satz von Lagrange bezeichnet .
Dies wird manchmal in Bezug auf Quaternionen diskutiert - eine Art Zahl, die William Hamilton im 19. Jahrhundert entdeckte und die als wobei sind reelle Zahlen und und sind verschiedene imaginäre Einheiten, die sich nicht kommutativ multiplizieren. Insbesondere wird in Bezug auf das Quadrieren jeder Komponente des Quaternions diskutiert . Diese Größe wird manchmal als Norm oder Quadratnorm oder auch Quadranz bezeichnet . Einige moderne Beweise des Satzes von Lagrange verwenden Quaternionen.
Rudolf Lipschitz studierte Quaternionen mit nur ganzzahligen Komponenten, sogenannte Lipschitz-Quaternionen. Mit der Quadranz können wir uns vorstellen, dass jede Lipschitz-Quaternion einen Freund in den ganzen Zahlen hat. Zum Beispiel kann man sich die Quaternion als der ganzen Zahl . Wenn wir rückwärts gehen, kann man sich jede ganze Zahl als Freund in den Lipschitz-Quaternionen vorstellen.
Es gibt jedoch ein interessantes Detail des Satzes von Lagrange - die Summe ist nicht eindeutig. Jede Ganzzahl kann verschiedene Sätze von vier Quadraten haben, die summiert werden können, um sie zu erstellen. Zum Beispiel kann die Zahl 1 auf vier Arten mit nicht negativen ganzen Zahlen ausgedrückt werden (betrachten wir für diese Herausforderung nur nicht negative Zahlen):
Die Summanden sind immer Quadrate von 0 oder 1, sie können sich jedoch in verschiedenen Positionen im Ausdruck befinden.
Für diese Herausforderung "sortieren" wir auch unsere Summanden von niedrig nach hoch, um Duplikate zu beseitigen, sodass wir in dieser Übung davon ausgehen können, dass 1 nur eine Möglichkeit hat, als Summe von vier Quadraten dargestellt zu werden:
Ein weiteres Beispiel ist die Zahl 42, die auf vier Arten ausgedrückt werden kann (wiederum nur unter Berücksichtigung von nichtnegativen a, b, c, d und Eliminierung doppelter Komponentenanordnungen).
Was ist, wenn wir uns jede dieser verschiedenen Arten, eine Ganzzahl auszudrücken, als mit einer bestimmten Quaternion assoziiert vorstellen? Dann könnten wir sagen, dass die Zahl 42 mit diesen vier Quaternionen assoziiert ist:
Wenn wir uns die standardmäßige Computergrafikinterpretation einer Quaternion vorstellen, bei der , und Vektoren im dreidimensionalen euklidischen Raum sind und die , und Komponenten der Quaternion dreidimensionale kartesische Koordinaten sind, können wir uns das jeweils vorstellen Eine Ganzzahl kann durch diesen Denkprozess mit einem Satz dreidimensionaler Koordinaten im Raum assoziiert werden. Beispielsweise ist die Zahl 42 den folgenden vier Koordinaten zugeordnet:
Dies kann als Punktwolke oder als Satz von Punkten im Raum betrachtet werden. Eine interessante Sache an einer Reihe von endlichen Punkten im Raum ist, dass Sie immer einen minimalen Begrenzungsrahmen um sie herum zeichnen können - einen Rahmen, der groß genug ist, um alle Punkte zu passen, aber nicht größer. Wenn Sie sich die Box als eine gewöhnliche Box vorstellen, die an den Achsen ausgerichtet ist, wird sie als achsenausgerichtete Begrenzungsbox bezeichnet . Der Begrenzungsrahmen verfügt auch über ein Volumen, das berechnet werden kann, indem Breite, Länge und Höhe ermittelt und miteinander multipliziert werden.
Wir können uns dann das Volumen eines Begrenzungsrahmens für die von unseren Quaternionen gebildeten Punkte vorstellen. Für die ganze Zahl 1 haben wir nach den Kriterien dieser Übung eine Quaternion, deren Quadranz 1, . Dies ist eine sehr einfache Punktwolke, sie hat nur einen Punkt, daher hat ihre Begrenzungsbox das Volumen 0. Für die Ganzzahl 42 haben wir jedoch vier Quaternionen und somit vier Punkte, um die wir eine Begrenzungsbox zeichnen können. Der minimale Punkt der Box ist und der maximale Punkt ist Daraus ergibt sich eine Breite, Länge und Höhe von 2, 2 und 2, was ein Volumen von 8 ergibt.
Nehmen wir an, dass für eine ganze Zahl das qVolumen das Volumen des achsenausgerichteten Begrenzungsrahmens aller 3D-Punkte ist, die durch Quaternionen gebildet werden, deren Quadranz gleich , wobei die Komponenten der Quaternion sind nicht negativ und .
Erstellen eines Programms oder der Funktion , dass bei einer einzigen nicht negative ganze Zahl , wird der Ausgang ‚s qvolume.
Beispiele:
input -> output
0 -> 0
1 -> 0
31 -> 4
32 -> 0
42 -> 8
137 -> 96
1729 -> 10032
Dies ist Code-Golf, die kleinste Anzahl von Bytes gewinnt.
quelle
Antworten:
Wolfram Language (Mathematica) ,
67-58BytesProbieren Sie es online!
quelle
Gelee , 17 Bytes
Probieren Sie es online! (ziemlich langsam - mach es schnell genug für alle Testfälle mit einem führenden
½
)Wie?
quelle
Haskell ,
132123 BytesProbieren Sie es online!
Ziemlich einfache Lösung. Brute Force alle möglichen Lösungen durch Iteration über alle Werte von 0 bis n (viel zu viel, aber kürzer bytecount). Ich gebe den Punkt als Liste aus, damit wir den Zauberoperator von @ Lynn verwenden
(!)
können. Dieser Operator reduziert jede Dimension mit der Funktion auf der linken Seite, sodassmax!p
eine Liste der Größe 3 zurückgegeben wird, die aus den Maxima in jeder Dimension besteht undmin!p
für das Minimum dasselbe tut. Dann finden wir einfach die minimale Größe in jeder Dimension (indem wir den min-Wert vom max mit subtrahierenz(-)
) und multiplizieren sie miteinander.Vielen Dank an @Lynn, der 9 Bytes mit etwas Faltzip-Magie entfernt hat!
quelle
zipWith
Logik verzichtet habe. 123 BytesVorschlaghammer 0,2, 12 Bytes
Verwendung mit Mathematica 11.2 und dieser Version von Vorschlaghammer, die der Herausforderung vorausgeht. Siehe Bearbeitungsverlauf für eine Version, die in Version 0.3 funktioniert, über eine GUI verfügt und einen Mathematica-Ausdruck generiert.
Dadurch wird die Eingabe in den Stapel verschoben und die Befehlssequenz aufgerufen
Dies entspricht der Auswertung des folgenden Wolfram-Codes, der aus meiner Wolfram Language-Antwort abgeleitet wurde :
Probieren Sie es online!
quelle
Python 2 , 138 Bytes
Probieren Sie es online!
Generiert rekursiv die umgekehrt sortierten Quaternionen mit der angegebenen Norm und nimmt dann das Produkt zwischen dem Maximum und dem Minimum aller möglichen Werte in den ersten drei Indizes auf.
itertools
hätte vielleicht eine Chance gehabt, wenn es keine lächerlich langen Namen wieitertools.combinations_with_replacement
Python 2 , 161 Bytes
Probieren Sie es online!
Deshalb
itertools
ist niemals die Antwort .quelle
JavaScript (ES6),
148143 BytesProbieren Sie es online!
Kommentiert
Wir initialisieren ein Arrayr mit 3 leeren Arrays.
Für jeden gültigen Wert vonx Wir werden uns darauf einstellen 1 der Wert bei x + 1 im ersten Array. Das Gleiche gilt füry und z mit den 2. und 3. Arrays.
Die Abmessungen des Begrenzungsrahmens ergeben sich aus dem Abstand zwischen dem ersten und dem zuletzt eingestellten Eintrag1 in diesen Arrays.
Schritt 1
Füllenr verwenden wir die rekursive Funktion G .
Schritt 2
Wir können jetzt das Produkt berechnenp der Dimensionen.
quelle
C # (Visual C # Interactive Compiler) , 229 Byte
Probieren Sie es online!
quelle
05AB1E , 18 Bytes
Probieren Sie es online!
Port of Jonathan Allans Gelee Antwort .
quelle
Haskell , 108 Bytes
Probieren Sie es online! (Zeitüberschreitung bei den größeren Testfällen)
Hier gibt es einige seltsame Optimierungen. Um
maximum l-minimum l
die Listel
der Elemente an einer bestimmten Position zu berechnen , ist es im Kontext kürzer, beide Elemente in Maxima umzuwandeln, indem der zweite Ausdruck negiert wird:maximum l+maximum(map((-1)*))l
oder gleichwertigsum[maximum$map(b*)l||b<-[-1,1]]
.Um die drei Dimensionen zu multiplizieren, stellt sich heraus, dass es kürzer ist, nur das Produkt
f n=n%0*n%1*n%2
zu schreiben, als irgendeine Art von Schleife zu verwenden. Hiern%i
ist die Differenz zwischen dem min und max deri
'ten Koordinatenwerte, die mit der Indizierung extrahiert werden!!i
.Um die gültigen Vierertupel zu generieren, nehmen wir Listen mit vier Zahlen,
[0..n]
deren Quadraten
in absteigender Reihenfolge addiert werden. Wir überprüfen die Rückwärtssortierung vont
mitscanr1 max t==t
, um festzustellen , ob das laufende Maximum der Rückwärtssortierung selbst vorliegt , da Haskell keine eingebaute Sortierung ohne kostspieligen Import hat. Wie in meinen Python-Antworten habe ich verschiedene Methoden zum rekursiven Generieren der vier Tupel ausprobiert, aber alle waren länger als diese Brute-Force-Methode zum Generieren und Filtern.quelle