Tarea
Dados enteros xy yque son ambos al menos 2, encuentre el número positivo más pequeño cuya yenésima potencia es divisible por x.
Ejemplo
Dado x=96y y=2, el resultado debería ser 24ya que 24es el más pequeño positivo nsatisfactorio 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

Xsiempre mayor queY?Xsea menor queY, y puede reducir la longitud de algunas respuestas (al menos la mía) siXsiempre es mayor queY. Prefiero queXpueda 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*%⁸i0Tambié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ógicaorde la condición y el resultado de la expresión parai+1incremental, que aquí está-~f(x,y,i+1). Esta expresión se evalúa continuamenteFalsehasta quejse encuentra un valor satisfactorio , en cuyo punto se evalúaTruey se detiene la recursividad. Dado que estos son respectivamente equivalentes0y1en Python, y la función se ha ido agregando repetidamente a1travé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)Truelugar dez?-~parte, pero sí, volveríaTruesixfuera 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)005AB1E (10 bytes)
Pruébalo en línea
>Lee el primer argumento, lo incrementa y lo empuja a la pilaGabre la pila (a) e inicia un ciclo que contiene el resto del programa dondeNtoma el valor1, 2, ... a - 1.N²mempujaNy 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 == 0la pila.isaca eso de la pila. Si es verdadero, ejecuta el resto del programa; de lo contrario, el ciclo continúa.NempujaNen la pila.qtermina 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?fpero 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.maxfunciona 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
zpara 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]"|dcdóndexy dóndeyson las mismas. Las preguntas x e y se colocarán en la pila de forma normal.-eopció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é questderrpuede 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
$xy$y. Construye un rango de1a$x, luego lo usaWhere-Objectpara 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$ytiempos, luego agrega una final1al final, luego los canaliza aiex(abreviaturaInvoke-Expressiony 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