Le problème A3 du concours Putnam 2008 dit:
Commencez par une séquence finie d'entiers positifs. Si possible, choisissez deux indices tels que a_j ne divise pas a_k et remplacez a_j et a_k par \ gcd (a_j, a_k) et \ text {lcm} (a_j, a_k) , respectivement. Prouver que si ce processus se répète, il doit finalement s'arrêter et la séquence finale ne dépend pas des choix effectués.
Votre objectif dans ce défi est de prendre une séquence finie d'entiers positifs en entrée et de produire le résultat de la répétition de ce processus jusqu'à ce qu'aucun autre progrès ne soit possible. (Autrement dit, jusqu'à ce que chaque nombre de la séquence résultante divise tous les nombres qui le suivent.) Vous n'avez pas besoin de résoudre le problème de Putnam.
C'est le code-golf : la solution la plus courte dans tous les langages de programmation l'emporte.
Cas de test
[1, 2, 4, 8, 16, 32] => [1, 2, 4, 8, 16, 32]
[120, 24, 6, 2, 1, 1] => [1, 1, 2, 6, 24, 120]
[97, 41, 48, 12, 98, 68] => [1, 1, 2, 4, 12, 159016368]
[225, 36, 30, 1125, 36, 18, 180] => [3, 9, 18, 90, 180, 900, 4500]
[17, 17, 17, 17] => [17, 17, 17, 17]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [1, 1, 1, 1, 1, 2, 2, 6, 60, 2520]
la source
Réponses:
Gelée , 9 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Pari / GP , 33 octets
Calculez les diviseurs élémentaires de la matrice diagonale.
Essayez-le en ligne!
la source
J , 17 octets
Essayez-le en ligne!
Probablement la première réponse J sur PPCG à utiliser
&.
deux fois. Après ceci et cela , je commence à me sentir comme un pirate informatique étrange.Fondamentalement, une traduction de la réponse de Dennis 'Jelly .
Comment ça fonctionne
la source
Wolfram Language (Mathematica) , 44 octets
Le ème élément du résultat est le GCD des LCM des sous-ensembles avec éléments.k k
Essayez-le en ligne!
la source
Python 3 , 103 octets
Essayez-le en ligne!
Explication
Ce problème est essentiellement une sorte parallèle sur les facteurs premiers, et (pgcd (a, b), ppcm (a, b)) est analogue à (min (a, b), max (a, b)). Parlons donc en termes de tri.
Nous prouverons par induction qu'après f (i, j), a [i] devient la plus petite valeur dans (l'ancienne valeur de) L, où L est la plage entre a [i] et a [j], y compris les deux extrémités . Et si j = -1, f (i, j) triera la plage L.
Le cas où L contient un élément est trivial. Pour la première revendication, notez que le plus petit de L ne peut pas rester dans un [j] après l'échange, donc f (i, j-1) le mettra dans un [i], et f (i + 1, - 1) ne l'affectera pas.
Pour la deuxième revendication, notez que a [i] est la plus petite valeur, et f (i + 1, -1) triera les valeurs restantes, donc L devient trié après f (i, j).
la source
Rétine , 65 octets
Essayez-le en ligne! Link inclut les cas de test les plus rapides. Explication:
Convertissez en unaire.
Correspondance répétée: tout nombre avec un facteur, puis un nombre ultérieur qui n'est pas divisible par le premier nombre mais qui est divisible par le facteur.
$1
est le premier nombre.$2
est le facteur. Parce que l'expression régulière est gourmande, c'est le plus grand facteur, c'est-à-dire le pgcd.$4
est la partie de la correspondance entre les numéros d'origine.$5
est le deuxième nombre.$#3
(en décimal plutôt qu'en unaire) est un de moins que$1
divisé par$2
, car il n'inclut pas l'original$2
. Cela signifie que pour calculer le lcm, nous devons multiplier$5
par un de plus$#3
ce qui est le plus succinctement écrit comme la somme de$5
et le produit de$#3
et$5
.Convertissez en décimal.
la source
05AB1E , 10 octets
Le mérite de l'approche revient aux alephalpha .
Essayez-le en ligne!
la source
Perl 6 , 53 octets
Essayez-le en ligne!
Port de la réponse Mathematica d'alephalpha.
la source
JavaScript (SpiderMonkey) , 69 octets
Essayez-le en ligne!
l
affectéelcm(p,q)
àa[j]
et affectéegcd(p, q)
àq
ifj > i
, sinon, tout reste inchangé.lcm(p,q) = if p%q=0 then p else p*lcm(q,p%q)/(p%q)
Ancienne réponse:
JavaScript (SpiderMonkey) , 73 octets
Essayez-le en ligne!
g
calculegcd(u, v)
et affecte une valeur de retour àu
.la source
05AB1E ,
151413 octetsPort de @ Dennis ♦ 'Réponse de Jelly , mais malheureusement 05AB1E n'a pas de module intégré Unxponents, donc cela prend plus de la moitié du programme .. :(
-1 octet grâce à @ Mr.Xcoder .
-1 octet grâce à @Enigma .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
¾
et en supprimant0ï
, +1. (J'ai déjà essayé cela parce que j'ai essayé de porter la réponse de Dennis aussi lol)εgÅpymP
économiserait un autre octet sur celui mentionné par M. Xcoder0
et¾
. Besoin de vous en souvenir! En fait, je vais l'ajouter à mes petits conseils 05AB1E dès maintenant. :)