Existe una ecuación, suponiendo n
y x
son positivas,
eso expresa la relación entre dos monomios, uno de los cuales es una tergiversación común del otro. Muchas personas cometen el simple error de igualar estos (es decir, 3x^2
y (3x)^2
).
Desafío
Dado un entero positivo i
, determine y devuelva la solución n
y x
con la suma más pequeña como una matriz [n, x]
. En caso de empate, cualquier conjunto de soluciones es aceptable.
Casos de prueba
62658722541234765
[15, 11]
202500
[4, 15]
524288
[8, 4]
33044255768277
[13, 9]
code-golf
number-theory
Puertas de Zach
fuente
fuente
[x, n]
lugar de[n, x]
?n
yx
enteros, ¿verdad?[n, x]
y no hay restricción de tiempo @Fatalizen
yx
son enteros @LuisMendoRespuestas:
Brachylog , 35 bytes
Pruébalo en línea!
Explicación
Construimos una lista
[N, X]
, dondeN >= X
, luego de asignarle valores, probamos ambos[N, X]
y[X, N]
como posible salida. Por ejemplo, siN
se asigna a3
, vamos a probar a través de dar marcha atrás[3, 1]
,[1, 3]
,[3, 2]
,[2, 3]
,[3, 3]
y[3, 3]
. Después de eso, el siguiente paso de retroceso ocurrirá en el valor deN
, que irá a4
, etc.fuente
Mathematica, 61 bytes
¡Gracias a las millas por ahorrar 2 bytes, más un montón de bytes que conté sin ninguna razón!
Calcula una tabla de pares {n, x}, donde x = (i / n) ^ (1 / n), utilizando todos los valores posibles de n; mantiene solo aquellos para los cuales la x correspondiente es un número entero; luego devuelve el par con el mayor valor de n.
Aquí, "todos los valores posibles de n" van de 1 a 2 * ln (i). Esto ignora la solución {n, x} = {i, 1}, pero está bien ya que la solución {n, x} = {1, i} será suficiente si es la mejor opción. Por lo tanto, x nunca necesita ser menor que 2, lo que significa que n * 2 ^ n ≤ i, y todos esos n son menores que 2 * ln (i).
Con el cálculo se puede demostrar que el par {n, x} que minimiza su suma en este contexto es el mismo que el par {n, x} con el n más grande (sin contar {i, 1}). Es por eso que la inicial
Last
es lo suficientemente buena como para encontrar el par óptimo.fuente
IntegerQ@*Last
para guardar 2 bytes, pero también cuento 63 no 86 bytes en esta versión actual.MATL , 22 bytes
Las salidas son
x
,n
en ese orden.La entrada está limitada por el
double
tipo de datos predeterminado de MATL , que puede representar con precisión enteros hasta2^53
solo. Esto excluye la primera prueba (aún así, da el resultado correcto, pero eso no se puede garantizar en general para entradas tan grandes).Pruébalo en línea!
Explicación
El código usa dos bucles anidados:
do...while
bucle externo pasa por todas las sumas posiblesn+x
en orden creciente. El ciclo se detendrá tan pronto como se encuentre una solución. Esto garantiza que generemos la solución con una suma mínima.for each
bucle interno prueba todon
yx
con esa suma. Cuando la suma coincide con la entrada, se sale del bucle interno y se establece la condición del bucle del bucle externofalse
para que también se salga uno.Código comentado:
fuente
Jalea ,
2316 bytesDado
i
, esto genera todos los pares de enteros con reemplazo en[1, i]
. Luego realiza el mismo filtrado y clasificación que en la solución anterior que se muestra a continuación. Dado que no hay restricción de tiempo, la fuerza bruta funcionará con el tiempo suficiente.Pruébalo en línea! , pero no intente valores grandes en línea.
En mi PC, toma alrededor de 6 minutos calcular el resultado para
i = 2048
usar la versión ineficiente.Versión eficiente
Esta es la solución anterior para 23 bytes que puede resolver los valores grandes rápidamente.
Dado
i
, calcula los divisores dei
para generar pares de[n, x]
donden
es un divisor yx = floor( (i/n)^(1/n) )
. Luego lo filtra por valores donden * x^n == i
, ordena los pares restantes por su suma y devuelve el primer par.Pruébalo en línea! o Verificar todos los casos de prueba.
Explicación
fuente
PHP, 104 bytes
Esto genera todas las soluciones posibles que no están en el formato propuesto 73 Bytes
fuente
Perl, 52 bytes
Incluye +2 para
-ap
Dar entrada sobre STDIN
mono.pl
:1
También se hizo un esfuerzo para que funcione . No tengo idea si los errores de coma flotante pueden hacer que esto devuelva la respuesta incorrecta para algunas entradas.fuente