Dados dos enteros positivos a
y b
, generar dos enteros positivos c
y d
tal que:
c
dividea
d
divideb
c
yd
son primos- el mínimo común múltiplo de
c
yd
es igual al mínimo común múltiplo dea
yb
.
Si hay más de una respuesta posible, puede generar solo una o todas.
Casos de prueba:
a b c d
12 18 4 9
18 12 9 4
5 7 5 7
3 6 1 6 or 3 2
9 9 9 1 or 1 9
6 15 2 15 or 6 5
1 1 1 1
Este es el código de golf . La respuesta más corta en bytes gana.
code-golf
arithmetic
number-theory
Monja permeable
fuente
fuente
d
divideb
Respuestas:
Jalea ,
2113 bytesPruébalo en línea!
En otras palabras: comenzar desde (c, d) = (a, b) . Entonces, para cada primo, brecha que el primer todo el camino de la factorización de cualquiera de C o D : el que tenga el menor exponente para que el primer. (En esta implementación, en caso de empate, c pierde su exponente).
Así que si a = 2,250 = 2 1 · 3 2 · 5 3 y b = 360 = 2 3 · 3 2 · 5 1 ,
a continuación, c = 2 0 · 3 0 · 5 3 = 125 y d = 2 3 · 3 2 · 5 0 = 72 .
¡Jonathan Allan jugó unos 8 bytes! Gracias ~
fuente
ÆEZ×Ụ’$€$ZÆẸ
[1,18]
por hecho[15,18]
. La versión inicial estaba devolviendo la respuesta correcta ([5,18]
).ÆEz®0iṂ$¦€ZÆẸ
debería hacer el truco para 13.R,
143139123 bytes(¡Gracias a @Giuseppe por esos 19 bytes de descuento!)
Con hendiduras, nuevas líneas y algunas explicaciones:
Casos de prueba:
fuente
!
tiene mayor prioridad que&
y|
pero menor que+
y*
; deberías poder jugar unos pocos bytes de esa manera; es decir,!i%%q&j%%q
debería ser equivalente a!i%%q+j%%q
GCD(c,d)==1
, entoncesLCM(c,d)==c*d
. Entonces podemos probarGCD(c,d)==1
y luego verificar sic*d==a*b/GCD(a,b)
este último esLCM(a,b)
...a*b/GCD(a,b)
no es más corto queLCM(a,b)
).Casco , 10 bytes
Fuerza bruta. Toma y devuelve listas, y también funciona para más de dos números. Pruébalo en línea!
Explicación
fuente
Mathematica, 82 bytes
fuente
Select[...][[1]]
lugar deFirst@Select[...]
guardar un byte?#&@@
lugar de[[1]]
guardar uno más ;-)JavaScript (ES6),
908480 bytesToma la entrada en la sintaxis de curry
(a)(b)
y devuelve una matriz de 2 enteros.Casos de prueba
Mostrar fragmento de código
¿Cómo?
fuente
MATL ,
1716 bytesPruébalo en línea!
El mismo método que la solución de jalea de Lynn
Ha pasado un tiempo desde que usé cualquier MATL (o matlab para el caso), es probable que haya muchas mejoras posibles.
fuente
Haskell ,
5048474542 bytesIdea: me di cuenta de eso
c*d = a*b/gcd(a,b)
. Entonces el algoritmo realiza dos pasos:c' = a/gcd(a,b)
yd' = b
. Esto cumple con todos los requisitos, excepto esoc'
yd'
tiene que ser primo.e = gcd(c',d')
y luego establezcoc = c'*e
yd = d'/e
. Esto mantiene todas las propiedades (ya que los factores combinados permanecen iguales), pero como elimino todos los factores compartidosd
, creoc
yd
coprimo.En mi implementación,
c'
solo se llamac
.Pruébalo en línea!
-3 bytes gracias a Laikoni
fuente
c
ahorra 3 bytes: ¡ Pruébelo en línea!05AB1E , 12 bytes
Pruébalo en línea! o como un conjunto de pruebas
fuente
R , 126 bytes
Pruébalo en línea!
Esto toma un enfoque diferente (y aparentemente menos golfista) para encontrar los valores que la otra respuesta R .
Explicación:
excepto que calzo todas las definiciones como argumentos predeterminados y hago todos los cálculos en una línea para el golf.
fuente
J , 19 bytes
Pruébalo en línea!
Basado en @ Lynn's solución de .
Explicación
fuente
Haskell ,
9174 bytesPruébalo en línea!
Guardado 17 bytes gracias a Laikoni
fuente
u*v`div`gcd u v
Guarda un byte.lcm
función incorporada?rem a x+rem b y+gcd x y<2
debería funcionar.lcm
existía la construcción .rem a x+rem b y+gcd x y<2
funciona, y me pregunto sirem a x+rem b y+gcd x y+lcm a b-lcm x y<2
funciona. Hay tal vez un (matemática) garantía de quelcm a b>=lcm x y
.lcm a b>=lcm x y
debido a 1.x=x1*...*xi
(primer descomposición),y=y1*...yj
,lcm x y=z1*...*zk
en dondez1,...,zk
son comunes ax1,...,xi
yy1,...,yj
. 2.a=u1*...*um*x1*...*xi
(descomposición primaria)b=v1*...vn*y1*...yj
,lcm a b=t1*...*tl
dondet1,...,tl
son comunes au1*...*um*x1*...*xi
yv1*...vn*y1*...yj
. Es obvio quet1,...,tl
contienez1,...,zk
, por lo tantolcm a b>=lcm x y
. Pero eso no es útil para escribir la condición como una suma.Python 2 , 75 bytes
La entrada se toma como una lista, que la función modifica en su lugar.
Pruébalo en línea!
fuente
Python 3 , 129 bytes
Pruébalo en línea! o Prueba la suite de prueba.
Emite todas las combinaciones posibles en forma de una lista anidada.
fuente
-~a
y-~b
pueden reescribirse comoa+1
yb+1
para facilitar su lectura: PJalea ,
19 1514 bytes-4 con puntero de Leaky Nun (usar divisor incorporado)
Estoy casi 100% seguro de que esta no es la forma de hacerlo, pero aquí hay un primer intento.
¡Veamos quién lo supera con un byte de siete u ocho!
Sí ... ¡mira la respuesta de Lynn con explicación!
Un enlace monádico que toma una lista de los dos números y devuelve una lista de listas de posibilidades.
Pruébalo en línea!
¿Cómo?
fuente
ÆD
pero (encogiéndose de hombros) el cerebro obviamente no está en marcha ...Perl 6 , 72 bytes
Pruébalo en línea!
Toma una lista (a, b). Devuelve una lista de todas las listas posibles (c, d).
Explicación:
fuente
Python 2 ,
126121 bytesPruébalo en línea!
fuente
Python 2 + sympy , 148 bytes
Pruébalo en línea!
-1 gracias a Jonathan Frech .
Esta respuesta funciona en Python 2 (no Python 3), usando
sympy.gcd
y ensympy.lcm
lugar demath.gcd
ymath.lcm
que solo están disponibles en Python 3. Y sí, esta es la fuerza bruta :)fuente
Q=c==z;
(+7 bytes) al comienzo del ciclo while y reemplazándoloor(c==z)+d
conor Q+d
(-4 bytes) yc=+(c==z)or
conc=+Q or
(-4 bytes). ( TIO )+
operador end=+E
oc=+(c==z)
para convertir un booleano en un entero?True
y enFalse
lugar de1
y0
en sympy.+...
tiene algún uso.Jalea , 13 bytes
Pruébalo en línea! Mi primera respuesta Jelly! Editar:
ÆEz0µỤ€’×µZÆẸ
también funciona para 13 bytes. Explicación:fuente
PARI / GP, 86 bytes
Esto solo hace lo que dice Lynn en su respuesta:
Si no cuento el
f(a,b)=
parte, son 79 bytes.fuente
05AB1E ,
322624222019 bytesPruébalo en línea! Todavía no tengo idea de cómo escribir en este idioma, pero al menos no es un algoritmo de fuerza bruta. Explicación:
fuente