Ein pythagoreisches Tripel besteht aus drei positiven ganzen Zahlen a, b und c, so dass a 2 + b 2 = c 2 . Ein solches Tripel wird üblicherweise geschrieben (a, b, c), und ein bekanntes Beispiel ist (3, 4, 5). Wenn (a, b, c) ein pythagoreisches Tripel ist, dann ist dies auch (ka, kb, kc) für eine positive ganze Zahl k. Ein primitives pythagoreisches Tripel ist eines, bei dem a, b und c Koprime sind .
Mit diesem Wissen können wir eine Sequenz erstellen, indem wir die kleinsten Längen von Tripeln miteinander verketten, wobei das nächste Element in der Sequenz die Hypotenuse (die größte Zahl) des kleinsten primitiven pythagoreischen Tripels ist, das das vorherige Element als das kleinste seiner Längen enthält.
Beginnen Sie mit dem kleinsten primitiven pythagoreischen Tripel (3, 4, 5). Die Sequenz beginnt mit 3
und die Hypotenuse (das nächste Element in der Sequenz) ist 5
. Dann finden Sie das kleinste primitive pythagoreische Tripel mit 5
als Bein, und Sie erhalten (5, 12, 13). Also geht die Sequenz weiter mit 13
.
Entweder geben Sie die Sequenz für immer aus, oder Sie nehmen eine Ganzzahleingabe n
und geben die ersten n
Elemente der Sequenz aus, entweder null oder eins indiziert.
Sie müssen die Ausgabe mindestens durch und einschließlich 28455997
unterstützen. Wenn jedoch das Limit des von Ihnen verwendeten Datentyps plötzlich angehoben wird, muss es für dieses neue Limit funktionieren. Sie können also eine Liste von Zahlen nicht hart codieren.
3
5
13
85
157
12325
90733
2449525
28455997
295742792965
171480834409967437
656310093705697045
1616599508725767821225590944157
4461691012090851100342993272805
115366949386695884000892071602798585632943213
12002377162350258332845595301471273220420939451301220405
Ähnliche Sequenzen (diese nicht ausgeben!):
12325
.85
... der nächsten Amtszeit3613
(können Sie sich vorstellen, was es noch ist?)Antworten:
Jelly , 19 Bytes
Dank @ Dennis wurde ein Byte durch Umgestaltung in eine unendliche Sequenz gespeichert .
Nimmt keine Eingaben und Argumente entgegen und gibt die Sequenz unbegrenzt aus, indem jeder Term beim Berechnen gedruckt wird. Diese Methode verlangsamt sich, wenn die Zahlen größer werden, da sie von der Primfaktorisierung abhängt.
Probieren Sie es online!
Dies berechnet den nächsten Term, indem die Primärenergiefaktorisierung des aktuellen Terms berechnet wird. Für 12325 ist dies {5 2 , 17, 29}. Es gibt eine Variante von Euklids Formel zur Berechnung pythagoreischer Tripel { a , b , c },
wobei m > n und das Tripel primitiv ist, wenn m und n Koprime sind.
Um die nächste Primitivwurzel aus 12325 zu berechnen, finden Sie m und n so, dass mn = 12325 und wählen Sie m , n, so dass gcd ( m , n ) = 1. Generieren Sie dann alle Paare von m , n, indem Sie alle Teilmengen von {5 2 erstellen , 17, 29} und Finden des Produkts jeder dieser Untergruppen, die {1, 25, 17, 29, 425, 725, 493, 12325} sind. Teilen Sie dann 12325 durch jeden Wert und jedes Paar, sodass jedes Paar m , n ist . Berechnen Sie die Formel für c mit jedem Paar und nehmen Sie das Minimum von 90733.
Erläuterung
quelle
o3ṄÆfµṪ,P²SHß
bei unendlicher ausgabe spart ein byte.Brachylog , 36 Bytes
Probieren Sie es online!
Sie müssen warten, bis das Programm abgelaufen ist (1 Minute), bevor TIO den Ausgang spült. In SWI-Prologs REPL wird dies gedruckt, sobald es den Wert findet.
Dadurch wird die Sequenz für immer gedruckt.
Nach ein paar Minuten mit dem Offline-Interpreter von SWI-Prolog erhielt ich
90733
nach12325
. Ich habe es nach diesem Punkt gestoppt.Dies ist keine vollständige Bruteforce, da sie Einschränkungen verwendet, um pythagoreische Tripel zu finden, obwohl sie offensichtlich nicht für die Geschwindigkeit optimiert ist.
Erläuterung
quelle
Perl, 73 Bytes
Alle pythagoreischen Dreiergruppen
a²+b²=c²
erfüllena=r(m²-n²), b=2rmn, c=r(m²+n²)
einige ganze Zahlenr,m,n
. Wennr=1
undm,n
Koprime sind, wobei genau eines durch 2 teilbar ist, danna,b,c
ist es ein primitives Tripel, bei dema,b,c
alle Koprime paarweise sind.In diesem Sinne, da einige
a
, verwende ich einen Brute-Force - Algorithmus , um die kleinste zu berechnen ,n
so dassa²-n²
ein Quadrat ist, nämlichm²
. Dannc
ist gleichn²+m²
.quelle
n
so dassa+n²
ein Quadrat ist.Python 3, 178 Bytes
Dies ist im Grunde genommen nur ein Brute-Force-Algorithmus und daher sehr langsam. Die Anzahl der auszugebenden Terme wird als Eingabe verwendet.
Ich bin mir nicht hundertprozentig sicher, ob dieser Algorithmus korrekt ist. Das Programm überprüft das andere Bein bis zum ersten Bein im Quadrat.
Probieren Sie es auf repl.it! (Veraltet) (Bitte versuchen Sie es nicht mit Zahlen über 10, da dies sehr langsam sein wird.)
quelle
math.gcd
. Verwenden Sie auchp+=[...]
anstelle vonp.append(...)
. Und<2
statt==1
. Und dasif
kann alles auf einer Linie sein.MATL , 27 Bytes
Dies erzeugt die ersten Terme der Sequenz. Die Eingabe ist 0-basiert.
Der Code ist sehr ineffizient. Der Online-Compiler läuft bei Eingaben ab, die größer als sind
5
. Die Eingabe6
dauerte anderthalb Minuten offline (und ergab den korrekten90733
sechsten Ausdruck).Probieren Sie es online!
quelle
Schläger 106 Bytes
Ungolfed:
Testen:
Ausgabe der Golfversion:
Ausgabe der ungolfed version:
(Fehler danach auf meinem Rechner)
quelle
Wolfram Language (Mathematica) , 74 Bytes
Probieren Sie es online!
Wolfram Language (Mathematica) , 74 Bytes
Probieren Sie es online!
quelle
PHP, 139 Bytes
Der obige Code bricht nach 28455997 auf 32-Bit-Systemen. Wenn höhere Zahlen benötigt werden, werden 156 Bytes benötigt:
quelle
Java 8, 133 Bytes
-25 Bytes dank Meilen Verwenden von n * n anstelle von Math.pow (n, 2)
-24 Bytes dank Meilen Verwenden von for-Schleifen anstelle von while, Ändern des Datentyps und Eliminieren von () aufgrund der Reihenfolge der Operationen
Nutzt die Tatsache, dass
für jedes Paar von ganzen Zahlen ist m> n> 0. Daher ist C gleich A plus 2 (N) 2 . Die obige Funktion ermittelt den kleinsten Wert von N, der diese Beziehung erfüllt, während das zweite Element des pythagoreischen Tripels eine ganze Zahl und größer als das erste Element ist. Dann setzt es den Wert des ersten Elements auf das dritte Element und wiederholt ihn mit dem aktualisierten ersten Element.
Ungolfed:
Ideone es!
* Die Ideone druckt aus zeitlichen Gründen nicht das letzte erforderliche Element, wie Sie jedoch anhand der Logik des Programms und der ungolfed Version (die den 28455997 als drittes Element des vorherigen pythagoreischen Tripels anstelle des ersten Elements von druckt) erkennen können Im nächsten Schritt werden die Werte mit einem höheren Zeitlimit ausgedruckt.
quelle
n*n
anstelle von verwendenMath.pow(n,2)
?for
Schleifen etwas mehr Zeit gespart, um es auf 133 Bytes zu bringen()->{long b=3,c,n;for(;;){for(n=1;;n++){c=b+2*n*n;double d=Math.sqrt(c*c-b*b);if(d==(int)d&b<d){System.out.println(b);break;}}b=c;}};
Python 3.5, 97 Bytes
Falsche Ausgabe nach
28455997
wegen der Grenzen des Gleitkomma-Datentyps. Diesqrt
Funktion ist nicht gut genug, aber wenn die Präzision auf magische Weise erhöht würde, würde es funktionieren.Ziemlich einfach zu verstehen. Das Inkrementieren
c
um zwei statt eins halbiert die Laufzeit und es müssen ohnehin nur ungerade Zahlen überprüft werden, da die Elemente immer ungerade sind.Probieren Sie es online aus
Das Programm kann nicht auf Ideone ausgeführt werden, da Ideone Python 3.4 verwendet
Damit die Ausgabe länger präzise bleibt, muss Folgendes verwendet werden
decimal
:Probieren Sie es online aus
Um auf unbestimmte Zeit genau zu bleiben, könnte ich so etwas Schreckliches tun (um die Genauigkeit zu erhöhen, die für jede einzelne Iteration erforderlich ist :
quelle
J ,
5447 BytesTIO
gierige Aufspaltung von Primfaktoren in Coprime-Faktoren
alte 54 Bytes TIOquelle
Pari / GP , 71 Bytes
Probieren Sie es online!
quelle
APL (NARS), 169 Zeichen, 338 Byte
teste ok bis 14 als Argument von q:
das unten würde alle Teiler seines Arguments finden ...
quelle
JavaScript (Node.js) , 101 Byte
Probieren Sie es online!
Vorschläge zum Golfen sind willkommen
quelle