Tarea
Dados enteros x
y y
que son ambos al menos 2
, encuentre el número positivo más pequeño cuya y
enésima potencia es divisible por x
.
Ejemplo
Dado x=96
y y=2
, el resultado debería ser 24
ya que 24
es el más pequeño positivo n
satisfactorio n^2 is divisible by 96
.
Casos de prueba
x y output
26 2 26
96 2 24
32 3 4
64 9 2
27 3 3
Puntuación
Este es el código de golf . Solución con el menor recuento de bytes gana.
Referencias
y=2
: OEIS A019554y=3
: OEIS A019555y=4
: OEIS A053166y=5
: OEIS A015052y=6
: OEIS A015054
X
siempre mayor queY
?X
sea menor queY
, y puede reducir la longitud de algunas respuestas (al menos la mía) siX
siempre es mayor queY
. Prefiero queX
pueda ser más grande o más pequeño, pero un caso de prueba para este último sería genial.Respuestas:
Brachylog ,
1917161512 bytes2 bytes guardados gracias a @LeakyNun.
Pruébalo en línea!
Explicación
fuente
Jalea , 6 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
R*%⁸i0
También es de 6 bytes.JavaScript (ES7), 32 bytes
fuente
f
. Creo que debes asignarle la funciónf
.Jalea , 6 bytes
Pruébalo en línea! overificar todos los casos de prueba .
Cómo funciona
fuente
Pitón 3,
604339 bytesGracias a @LeakyNun y @ Sp3000 por su ayuda.
Una función que toma la entrada a través del argumento y devuelve la salida.
Cómo funciona
La función usa la recursión para verificar enteros repetidamente
i
, comenzando coni=1
, hasta que se encuentre uno que satisfaga la condición requeridai**y%x<1
. Esto se logra tomando la lógicaor
de la condición y el resultado de la expresión parai+1
incremental, que aquí está-~f(x,y,i+1)
. Esta expresión se evalúa continuamenteFalse
hasta quej
se encuentra un valor satisfactorio , en cuyo punto se evalúaTrue
y se detiene la recursividad. Dado que estos son respectivamente equivalentes0
y1
en Python, y la función se ha ido agregando repetidamente a1
través de la parte de incremento, la función devuelve(j-1)*False + True + (j-1)*1 = (j-1)*0 + 1 + (j-1)*1 = 1 + j-1 = j
, según sea necesario.Pruébalo en Ideone
fuente
def f(x,y,i=1):¶ while i**y%x:i+=1¶ print(i)
f=lambda x,y,z=1:z**y%x<1or-~f(x,y,z+1)
True
lugar dez
?-~
parte, pero sí, volveríaTrue
six
fuera 1.Haskell, 31 bytes
Ejemplo de uso:
96#2
->24
.Implementación directa: pruebe todos los enteros
n
, conserve los que cumplan la condición y elija el primero.fuente
x#y=until(\n->mod(n^y)x<1)(+1)0
05AB1E (10 bytes)
Pruébalo en línea
>
Lee el primer argumento, lo incrementa y lo empuja a la pilaG
abre la pila (a
) e inicia un ciclo que contiene el resto del programa dondeN
toma el valor1, 2, ... a - 1
.N²m
empujaN
y la segunda entrada del historial de entrada, luego los saca a ambos y empuja el primero al poder del segundo.¹
empuja la primera entrada del historial de entrada a la pila.Ö
muestra las dos entradas anteriores de la pila, luego empujaa % b == 0
la pila.i
saca eso de la pila. Si es verdadero, ejecuta el resto del programa; de lo contrario, el ciclo continúa.N
empujaN
en la pila.q
termina el programaCuando finaliza el programa, se imprime el valor superior de la pila.
fuente
MATL , 9 bytes
Pruébalo en línea!
Explicación
fuente
find
?f
pero eso encuentra todos los índices distintos de cero. Entonces, tendría que ser~f1)
: negativo, encontrar, obtener la primera entradaEn realidad ,
1211 bytesMuchas gracias a Leaky Nun por sus muchas sugerencias. Sugerencias de golf bienvenidas. Pruébalo en línea!
Enfoque original de 12 bytes. Pruébalo en línea!
Otro enfoque de 12 bytes. Pruébalo en línea!
Un enfoque de 13 bytes. Pruébalo en línea!
No golfista:
Primer algoritmo
Algoritmo original
Tercer algoritmo
Cuarto algoritmo
fuente
;)
R,
61 bytes,39 bytes,37 bytes, 34 bytesTodavía soy un novato en la programación de R y resulta que esta es mi primera función que creo en R ( ¡ Sí ! ), Así que creo que todavía hay margen de mejora.
La prueba en línea se puede realizar aquí: RStudio en rollApp .
Gran progreso:
which.max
funciona porque devuelve el valor más alto en un vector y si hay varios devolverá el primero. En este caso, tenemos un vector de muchos FALSE (que son 0) y algunos VERDADEROS (que son 1), por lo que devolverá el primer VERDADERO.Otro progreso:
Finalmente, supera la respuesta usando Python por dos bytes. :)
Otro progreso: (¡Otra vez!)
Muchas gracias a Axeman y user5957401 por la ayuda.
fuente
which.min
, podría deshacerse de él==0
. El módulo devolverá un número, que no será inferior a 0.function(x,y)which(!(1:x)^y%%x)[1]
.corriente continua,
2322 bytesGracias a Delioth por su consejo sobre los métodos de entrada, guardar un byte
Utiliza el operador de profundidad de pila
z
para incrementar el caso de prueba directamente en la pila, y el operador de exponenciación modular|
para, bueno, exponenciación modular. Repita la prueba hasta que el resto no sea mayor que cero.fuente
?
al principio, ya que una forma estándar de invocar algunas cosas es> echo "x y [program]"|dc
dóndex
y dóndey
son las mismas. Las preguntas x e y se colocarán en la pila de forma normal.-e
opción, pero la usaré de ahora en adelante."
no está implementadodc
, mientras que no usar comillas obviamente da errores de shell. ¿Hay algo que hacer al respecto? Sé questderr
puede ser ignorado, pero todavía me molesta.05AB1E , 8 bytes
Explicación
Pruébalo en línea
fuente
Perl 6 ,
2625 bytesExplicación:
fuente
Mathematica, 36 bytes
fuente
Dyalog APL , 11 bytes
Traducción de esto .
0⍳⍨
encuentra el primer cero en⊣|
los restos de la división cuando x divide(⍳⊣)*
los enteros uno a través de x , elevado a la potencia de⊢
yTryAPL en línea!
fuente
PowerShell v2 +, 48 bytes
Toma entrada
$x
y$y
. Construye un rango de1
a$x
, luego lo usaWhere-Object
para filtrar esos números. El filtro toma la cadena"$_*"
(es decir, el número actual con un asterisco) y usa la multiplicación de la cadena para concatenar esos$y
tiempos, luego agrega una final1
al final, luego los canaliza aiex
(abreviaturaInvoke-Expression
y similar aeval
). Esto toma el lugar de[math]::Pow($_,$y)
, ya que PowerShell no tiene un operador de exponenciación, y es dos bytes más corto. Eso se alimenta al operador de módulo%
con$x
, por lo tanto, si es divisible, será el0
, así que encapsulamos eso en parens y tomamos el booleano-no!(...)
del mismo. Por lo tanto, si es divisible, se incluirá en este filtro y se excluirán todos los demás números.Finalmente, encapsulamos los números resultantes en parens
(...)
y tomamos el[0]
índice. Como el rango ingresado está ordenado1..$x
, este será el más pequeño. Eso queda en la tubería y la impresión está implícita.Casos de prueba
fuente
PHP,
5533 bytesfuente
Perl,
2926 bytesIncluye +3 para
-p
(no +1 ya que el código contiene'
)Ejecutar con la entrada en STDIN
power.pl
:fuente
Pyth, 9 bytes
Un programa que toma la entrada de una lista del formulario
[x, y]
en STDIN e imprime el resultado.Pruébalo en línea
Cómo funciona
fuente
PHP 59 bytes
Lo siento, pero no puedo probar esto desde mi móvil. :)
Golfed
fuente