El problema A3 de la competencia Putnam 2008 dice:
Su objetivo en este desafío es tomar una secuencia finita de enteros positivos como entrada y generar el resultado de repetir este proceso hasta que no sea posible ningún progreso adicional. (Es decir, hasta que cada número en la secuencia resultante divida todos los números que le siguen). No necesita resolver el problema de Putnam.
Esto es code-golf : gana la solución más corta en cada lenguaje de programación.
Casos de prueba
[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]
code-golf
array-manipulation
number-theory
Misha Lavrov
fuente
fuente
Respuestas:
Jalea , 9 bytes
Pruébalo en línea!
Cómo funciona
fuente
Pari / GP , 33 bytes
Calcular los divisores elementales de la matriz diagonal.
Pruébalo en línea!
fuente
J , 17 bytes
Pruébalo en línea!
Probablemente la primera respuesta J en PPCG para usar
&.
dos veces. Después de esto y aquello , empiezo a sentirme como un extraño hacker de J.Básicamente una traducción de la respuesta de Dennis 'Jelly .
Cómo funciona
fuente
Wolfram Language (Mathematica) , 44 bytes
El -ésimo elemento del resultado es el MCD de los LCM de los subconjuntos con elementos.k k
Pruébalo en línea!
fuente
Python 3 , 103 bytes
Pruébalo en línea!
Explicación
Este problema es esencialmente una clasificación paralela de los factores primos, y (mcd (a, b), mcm (a, b)) es análogo a (min (a, b), max (a, b)). Entonces hablemos en términos de clasificación.
Demostraremos por inducción que después de f (i, j), a [i] se convierte en el valor más pequeño en (el valor anterior de) L, donde L es el rango entre a [i] y a [j], incluidos ambos extremos . Y si j = -1, f (i, j) ordenará el rango L.
El caso cuando L contiene un elemento es trivial. Para el primer reclamo, observe que el más pequeño de L no puede permanecer en un [j] después del intercambio, por lo que f (i, j-1) lo colocará en un [i], yf (i + 1, - 1) no lo afectará.
Para la segunda afirmación, tenga en cuenta que a [i] es el valor más pequeño y f (i + 1, -1) clasificará los valores restantes, por lo que L se ordena después de f (i, j).
fuente
Retina , 65 bytes
Pruébalo en línea! El enlace incluye los casos de prueba más rápidos. Explicación:
Convierte a unario.
Emparejar repetidamente: cualquier número con un factor, luego un número posterior que no es divisible por el primer número pero es divisible por el factor.
$1
Es el primer número.$2
es el factor Debido a que la expresión regular es codiciosa, este es el factor más importante, es decir, el mcd.$4
es la parte de la coincidencia entre los números originales.$5
Es el segundo número.$#3
(en decimal en lugar de unario) es uno menos que$1
dividido por$2
, ya que no incluye el original$2
. Esto significa que para calcular el mcm necesitamos multiplicar$5
por uno más de lo$#3
que se escribe más sucintamente como la suma de$5
y el producto de$#3
y$5
.Convierte a decimal.
fuente
05AB1E , 10 bytes
El crédito por el enfoque va a alephalpha .
Pruébalo en línea!
fuente
Perl 6 , 53 bytes
Pruébalo en línea!
Port of alephalpha's Mathematica answer.
fuente
JavaScript (SpiderMonkey) , 69 bytes
Pruébalo en línea!
l
asignarlcm(p,q)
aa[j]
, y asignargcd(p, q)
aq
sij > i
, de lo contrario mantiene todo sin cambios.lcm(p,q) = if p%q=0 then p else p*lcm(q,p%q)/(p%q)
Vieja respuesta:
JavaScript (SpiderMonkey) , 73 bytes
Pruébalo en línea!
g
calculargcd(u, v)
y asignar valor de retorno au
.fuente
05AB1E ,
151413 bytesPuerto de @ Dennis ♦ 'Respuesta de Jelly , pero desafortunadamente 05AB1E no tiene un componente de Unexponents, por lo que toma más de la mitad del programa ... :(
-1 byte gracias a @ Mr.Xcoder .
-1 byte gracias a @Enigma .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
¾
y eliminando0ï
, +1. (He intentado esto antes porque intentéεgÅpymP
ahorraría otro byte sobre el Sr. Xcoder metioned0
y¾
. ¡Necesito recordar eso! De hecho, lo agregaré a mis pequeños consejos 05AB1E ahora mismo. :)