El mínimo común múltiplo de un conjunto de números enteros positivos A
es el entero más pequeño postive B
tal que, para cada uno k
en A
, existe un número entero positivo n
tal que k*n = B
.
Dado al menos dos enteros positivos como entrada, genera su mínimo común múltiplo.
Reglas
- Se permiten las soluciones integradas, pero si su solución usa una, se le recomienda que incluya una solución alternativa que no use las soluciones integrales GCD / LCM. Sin embargo, la solución alternativa no contará para su puntaje, por lo que es completamente opcional.
- Todas las entradas y salidas estarán dentro del rango representable de forma nativa para su idioma. Si su idioma es capaz de forma nativa de enteros arbitrariamente grandes, entonces su solución debe funcionar con entradas y salidas arbitrariamente grandes.
Casos de prueba
[7, 2] -> 14
[8, 1] -> 8
[6, 4, 8] -> 24
[8, 2, 1, 10] -> 40
[9, 6, 2, 1, 5] -> 90
[5, 5, 7, 1, 1] -> 35
[4, 13, 8, 8, 11, 1] -> 1144
[7, 2, 2, 11, 11, 8, 5] -> 3080
[1, 6, 10, 3, 4, 10, 7] -> 420
[5, 2, 9, 10, 3, 4, 4, 4, 7] -> 1260
[9, 7, 10, 9, 7, 8, 5, 10, 1] -> 2520
Respuestas:
En realidad,
121 byteLas sugerencias de golf siguen siendo bienvenidas, aunque no estoy seguro de cómo mejorar el LCM sin procesar incorporado. Pruébalo en línea!
Una versión de 12 bytes sin el incorporado. Sugerencias de golf bienvenidas. Pruébalo en línea!
Ungolfing
fuente
JavaScript (ES6), 36 bytes
A partir de
1
este es el primer número que se puede dividir por todos.Mostrar fragmento de código
fuente
some
devuelve verdadero si al menos un elemento de la matriz cumple la condición, ¿verdad?05AB1E / 2sable , 2 bytes
Pruébalo en línea! en 05AB1E
o 2sable
fuente
Jalea , 3 bytes
Reduce por LCM. Pruébalo en línea! o verificar todos los casos de prueba .
Versión alternativa, 6 bytes.
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Python,
69655250 bytes¡2 bytes guardados gracias a Dennis!
Solución recursiva bastante sencilla, deberá hacer que el límite de recurrencia sea un poco más alto para que funcionen algunos de los casos de prueba.
fuente
any
toma un generador; No necesitas los soportes.A=lambda l,i=1:all(i%a<1for a in l)or-~A(l,i+1)
Guarda algunos bytes más.MATL , 7 bytes
No incorporado.
Pruébalo en línea!
Explicación
Tomemos la entrada
[8, 2, 1, 10]
como un ejemplo.EDITAR (9 de junio de 2017):
YF
con dos salidas se ha modificado en la versión 20.1.0 : los primos sin factor y sus exponentes (cero) se omiten. Esto no afecta el código anterior, que funciona sin requerir ningún cambio.fuente
Julia (3 Bytes) [Trabajando en no incorporado]
Como señaló Dennis, sigo olvidando que Julia vectoriza automáticamente las entradas.
Ejemplo:
fuente
PowerShell v2 +,
7360 bytesToma de entrada
$a
, bucles hacia arriba desde$i=1
con$i++
, basado en un condicional. La condición se($a|?{!($i%$_)}).count
siendo-n
ote
qual a$a.count
. Es decir, el ciclo termina cuando los elementos de$a
que son divisores de$i
es igual a los elementos de$a
. Luego,$i
queda un solitario en la tubería, y la salida es implícita.Casos de prueba
fuente
Mathematica, 3 bytes
Uso:
fuente
Cheddar, 33 bytes
Nada super nuevo.
Sin golf
Básicamente, esto comienza en uno y continúa aumentando hasta que encuentra un LCM
fuente
JavaScript (ES6),
6359 bytesEncuentra recursivamente el MCM de los dos últimos elementos.
fuente
a=>a.reduce((l,n)=>l*n/(g=(m,n)=>n?g(n,m%n):m)(l,n))
Dyalog APL, 2 bytes
Reduce por LCM. Pruébelo en TryAPL .
fuente
JavaScript (ES6), 52 bytes
I
reduce
d esta respuesta tanto como pude, pero obviamente no voy a llegar a ninguna parte cerca de la simplicidad de la respuesta de Hedi @.fuente
Java 8,
755912189 bytesUtiliza el algoritmo euclidiano y el hecho de que LCM (A, B) = A * B / GCD (A, B)
Código:
Eliminar saltos de línea:
fuente
n->{...}
Creo que adquiera validez de Java 8.int g(int a,int b){return b<1?a:g(b,a%b);}
. LCM puede convertirseint l(int[]a){int l=1;for(int n:a)l=l*n/g(l,n);return l;}
en un total de 99 bytes.MATL , 3 bytes
Esto usa la función incorporada con entrada de matriz.
Pruébalo en línea!
fuente
Brachylog , 17 bytes
Pruébalo en línea!
Explicación
fuente
Perl 6 , 10 bytes
básicamente lo mismo que:
fuente
J, 11 bytes
Hay una solución para 3 bytes usando el LCM incorporado.
Explicación
fuente
CJam,
181716 bytes1 byte guardado gracias a Martin Ender.
Incrementando hasta encontrar el LCM.
Pruébalo en línea
fuente
Raqueta 13 bytes
mcm es una función incorporada en Racket:
Pruebas:
Salida:
fuente
R, 36 bytes (no incorporado)
Toma la entrada. Luego prueba cada entero positivo tomando el mod.
fuente
cat
última rondai
ec=T
está bien para +4 en lugar de +5 paracat()
.v=scan();while(any((F=F+1)%%v)){};F
concat()
oec=T
por lo que es 40 o 39 bytes, respectivamente. Y +1, muy buen enfoque.Pyth, 9 bytes
Un programa que toma la entrada de una lista en STDIN e imprime el resultado.
Pruébelo en línea o verifique todos los casos de prueba
Cómo funciona
fuente
Haskell, 10 bytes
Ejemplo de uso:
foldl1 lcm [5,2,9,10,3,4,4,4,7]
->1260
.fuente
C #, 50 + 18 = 68 bytes
50 bytes para la definición del método, +18 bytes para la importación LINQ.
Más o menos lo mismo que muchas otras respuestas. Cuenta recursivamente hasta encontrar el LCM. Me sorprendió un poco que esto no obtuviera una StackOverflowException, por lo que también tengo una versión no recursiva que en realidad es solo 1 byte más.
Sin golf:
fuente
Pip , 10 bytes
Utiliza la estrategia "prueba cada número hasta que uno funcione". Pruébalo en línea!
fuente
PHP,
4274 bytesdirecto:
bucle
$f
de 1 hacia arriba; si se$f*$a
divide$b
sin un resto, se encuentra el LCM.Leí por completo el
at least
... aquí está el código para cualquier número de parámetros:Bucle
$f
de 1 hacia arriba, mientras que el bucle interno no se ha ejecutado a $ argc.Bucle
$i
desde2
hasta$argc-1
mientras se$f*$argv[1]
divide$argv[$i]
sin un resto.ambos bucles rotos: impresión
$f*$argument 1
.fuente
Prólogo (SWI) , 46 bytes
Pruébalo en línea!
Otra solución, 59 bytes:
fuente
Python 3, 83 bytes
fuente
Brachylog v2, 8 bytes
Pruébalo en línea!
Es curioso cuán directamente esto se asigna a la definición dada en el desafío.
Una solución sospechosamente lenta pero significativamente más corta:
Brachylog v2, 5 bytes
Pruébalo en línea!
Toma entrada a través de la variable de salida y da salida a través de la variable de entrada. Desglosa los primeros cuatro casos de prueba, pero todavía estoy esperando el quinto ... Por lo general, todavía lo convertiría en mi solución principal y confío en que funcione correctamente, pero no sé por qué no lo ha hecho. confirmó que 90 es el MCM de
9, 6, 2, 1, 5
cuando le di 90 hace veinte minutos.(Editar: confirmó la respuesta después de no más de 16 horas y la generó junto con el LCM de
5, 5, 7, 1, 1
aproximadamente dos días).Y otro predicado completamente diferente que accidentalmente traduce más o menos la solución Brachylog v1 de Fatalize:
Brachylog v2, 10 bytes
Pruébalo en línea!
Esto se rescató de una solución que había hecho para este desafío antes de darme cuenta de que la salida no se limitaba a ser un número entero.
fuente
Pyth -
76 bytesNo incorporado.
Pruébelo en línea aquí .
fuente
[4]
, o cualquier otra cosa con un factor primo repetido.