Un triple de Pythagore est constitué de trois entiers positifs a, b et c, tels que a 2 + b 2 = c 2 . Un tel triple est couramment écrit (a, b, c), et un exemple bien connu est (3, 4, 5). Si (a, b, c) est un triple de Pythagore, alors il en est de même (ka, kb, kc) pour tout entier positif k. Un triple primitif de Pythagore est un triple dans lequel a, b et c sont coprimes .
En utilisant cette connaissance, nous pouvons créer une séquence en enchaînant les plus petites longueurs de triples, où l'élément suivant de la séquence est l'hypoténuse (le plus grand nombre) du plus petit triple primitif de Pythagore, contenant l'élément précédent en tant que plus petit de ses longueurs.
Commencez avec le plus petit triple primitif de Pythagore (3, 4, 5). La séquence commence par 3
, et l'hypoténuse (élément suivant de la séquence) l'est 5
. Ensuite, trouvez le plus petit triple primitif de Pythagore avec 5
une jambe et vous obtenez (5, 12, 13). Donc la séquence continue avec 13
.
Sortez la séquence pour toujours ou prenez une entrée entière n
et sortez les premiers n
éléments de la séquence, zéro ou un indexé.
Vous devez prendre en charge la sortie au moins jusqu'à et y compris 28455997
, mais si la limite du type de données que vous utilisez était soudainement augmentée, il devrait fonctionner pour cette nouvelle limite. Vous ne pouvez donc pas coder en dur une liste de nombres.
3
5
13
85
157
12325
90733
2449525
28455997
295742792965
171480834409967437
656310093705697045
1616599508725767821225590944157
4461691012090851100342993272805
115366949386695884000892071602798585632943213
12002377162350258332845595301471273220420939451301220405
Séquences similaires (ne les sortez pas!):
12325
.85
... son prochain mandat est3613
(pouvez-vous deviner ce que c'est encore?)Réponses:
Gelée , 19 octets
Sauvegardé un octet grâce à @ Dennis en refacturant une séquence infinie.
Ne prend aucune entrée ni argument, puis affiche la séquence indéfiniment en imprimant chaque terme au fur et à mesure de son calcul. Cette méthode ralentit au fur et à mesure que le nombre augmente, car elle dépend de la factorisation en facteurs premiers.
Essayez-le en ligne!
Ceci calcule le terme suivant en calculant la factorisation de la puissance première du terme actuel. Pour 12325, il s’agit de {5 2 , 17, 29}. Il existe une variante de la formule de Euclide pour calculer les triples de Pythagore { a , b , c },
où m > n et le triple est primitif si et seulement si m et n sont coprimes.
Pour calculer la prochaine racine primitive à partir de 12325, recherchez m et n tels que mn = 12325 et choisissez m , n pour que gcd ( m , n ) = 1. Générez ensuite toutes les paires de m , n en créant tous les sous-ensembles de {5 2 , 17, 29} et trouver le produit de chacun de ces sous-ensembles qui sont {1, 25, 17, 29, 425, 725, 493, 12325}. Ensuite, divisez 12325 par chaque valeur et appliquez la paire de sorte que chaque paire soit m , n . Calculez la formule pour c en utilisant chaque paire et prenez le minimum qui est 90733.
Explication
la source
o3ṄÆfµṪ,P²SHß
avec une sortie infinie enregistre un octet.Brachylog , 36 octets
Essayez-le en ligne!
Vous devez attendre la fin du programme (1 minute) avant que TIO ne vide la sortie. Dans REPL de SWI-Prolog, cela s'imprime dès qu'il trouve la valeur.
Cela imprimera la séquence pour toujours.
Après quelques minutes d'interprétation hors ligne de SWI-Prolog, j'ai obtenu
90733
après12325
. Je l'ai arrêté après ce point.Ce n'est pas un effort brutal complet, car il utilise des contraintes pour trouver des triples pythagoriciens, bien qu'il ne soit évidemment pas optimisé pour la vitesse.
Explication
la source
Perl, 73 octets
Tous les triples de Pythagore
a²+b²=c²
satisfonta=r(m²-n²), b=2rmn, c=r(m²+n²)
pour certains entiersr,m,n
. Quandr=1
etm,n
sont coprimes avec exactement un divisible par 2, alorsa,b,c
est un triple primitif, oùa,b,c
sont tous deux coprimes.Gardant cela à l’esprit,
a
j’utilise un algorithme de force brute pour calculer le plus petitn
tel qu’ila²-n²
s’agit d’un carré, à savoirm²
. Alors,c
est égal àn²+m²
.la source
n
ce quia+n²
est un carré.Python 3, 178 octets
Ceci est fondamentalement juste un algorithme de force brute, et est donc très lent. Il faut la quantité de termes à afficher en entrée.
Je ne suis pas sûr à 100% de l'exactitude de cet algorithme, le programme vérifie que l'autre jambe correspond à la première jambe carrée, ce qui est suffisant, mais je n'ai pas fait le calcul.
Essayez-le sur repl.it! (Obsolète) (Merci de ne pas l'essayer pour des nombres supérieurs à 10, ce sera très lent)
la source
math.gcd
. Aussi, utilisezp+=[...]
au lieu dep.append(...)
. Et<2
au lieu de==1
. Et leif
tout peut être sur une seule ligne.MATL , 27 octets
Cela produit les premiers termes de la séquence. L'entrée est basée sur 0.
Le code est très inefficace. Le compilateur en ligne expire pour des entrées supérieures à
5
. L'entrée6
prenait une minute et demie hors ligne (et produisait le90733
6ème terme correct ).Essayez-le en ligne!
la source
Raquette 106 octets
Ungolfed:
Essai:
Sortie de la version golfée:
Sortie de la version non-golfée:
(Erreur après ceci sur ma machine)
la source
Wolfram Language (Mathematica) , 74 octets
Essayez-le en ligne!
Wolfram Language (Mathematica) , 74 octets
Essayez-le en ligne!
la source
PHP, 139 octets
Le code ci-dessus se rompt après 28455997 sur les systèmes 32 bits. Si des nombres plus élevés sont nécessaires, cela devient 156 octets:
la source
Java 8, 133 octets
-25 octets grâce aux miles Utilisation de n * n à la place de Math.pow (n, 2)
-24 octets grâce aux miles Utilisation des boucles for à la place de while, modification du type de données, élimination de () en raison de l'ordre des opérations
Utilise le fait que
pour toute paire d'entiers m> n> 0. Par conséquent, C est égal à A plus 2 (N) 2 . La fonction ci-dessus trouve la plus petite valeur de N qui satisfait cette relation, tout en faisant du deuxième élément du triple de Pythagore un entier et supérieur au premier élément. Ensuite, il définit la valeur du premier élément sur le troisième élément et répète avec le premier élément mis à jour.
Ungolfed:
Ideone ça!
* L'idéone n'imprime pas le dernier élément requis en raison de délais, comme vous pouvez le constater à travers la logique du programme et la version non-golfée (qui imprime le 28455997 en tant que troisième élément du précédent triple de Pythagore plutôt que le premier la suivante), les valeurs sont, avec une limite de temps supérieure, imprimées.
la source
n*n
au lieu deMath.pow(n,2)
?for
boucles pour le réduire à 133 octets()->{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 octets
Mauvaise sortie après
28455997
, à cause des limites du type de données à virgule flottante. Lasqrt
fonction ne suffit pas, mais si la précision était augmentée comme par magie, cela fonctionnerait.Assez simple à comprendre. L'incrémentation
c
de deux au lieu de un réduit le temps d'exécution de moitié, et seuls les nombres impairs doivent de toute façon être vérifiés, car les éléments sont toujours impairs.Essayez-le en ligne
Le programme ne peut pas être exécuté sur Ideone, car Ideone utilise Python 3.4
Pour que la sortie reste précise plus longtemps, je devrais utiliser
decimal
:Essayez-le en ligne
Pour rester précis indéfiniment, je pourrais faire quelque chose d’horrible comme celui-ci (augmenter la précision requise à chaque itération :
la source
J ,
5447 octetsTIO
scission gourmande de facteurs premiers en facteurs de coprime
vieux 54 octets TIOla source
Paris / GP , 71 octets
Essayez-le en ligne!
la source
APL (NARS), 169 caractères, 338 octets
test ok jusqu'à 14 comme argument de q:
cette ci-dessous trouverait tous les diviseurs de son argument ...
la source
JavaScript (Node.js) , 101 octets
Essayez-le en ligne!
Les suggestions sur le golf sont les bienvenues
la source