En matemáticas, la tetración es el siguiente hiperoperador después de la exponenciación, y se define como exponenciación iterada.
Suma ( un éxito n veces)
Multiplicación ( un agregado a sí mismo, n veces)
Exponenciación ( un multiplicado por sí mismo, n veces)
Tetración ( un exponenciadas por sí mismo, n veces)
Las relaciones inversas de la tetración se denominan superraíz y superlogaritmo. Su tarea consiste en escribir un programa que, dada A y B, imprime el B nd -order súper raíz del A.
Por ejemplo:
- si A =
65,536
y B =4
se imprime2
- si A =
7,625,597,484,987
y B =3
se imprime3
A y B son enteros positivos y el resultado debe ser un número de coma flotante con una precisión de 5 dígitos después del punto decimal. El resultado pertenece al dominio real.
Tenga cuidado, las superraíces pueden tener muchas soluciones.
Respuestas:
C - buscando claridad, no intenté exprimir el código
Considerando la entrada:
Entonces, por lo general, solo debe haber una solución en ℝ, lo que simplifica considerablemente el problema.
El código es:
Compilar:
Correr:
P.ej:
4 2
3 3
3 π
n (2 ½ ) ➙ 2 como n ➙ ∞? (límite bien conocido)
¡Si!
n (e 1 / e ) ➙ ∞ como n ➙ ∞? (límites superiores)
¡Frio! (e 1 / e ≅ 1.44466786101 ...)
fuente
Python, 87 caracteres
Una búsqueda lineal simple para la respuesta.
Fuera de tema, pero ¿qué pasa con el
**
operador de Python * # $ (@!fuente
(1e200)**2
a1e(200**2)
?OverflowError
en el primer caso.Mathematica,
3540Genera una lista de todas las soluciones, con precisión de 5 dígitos.
5 caracteres más para obtener solo la solución real, que exigen las reglas actualizadas.
fuente
Julia
Se omitió la instrucción de coma flotante ya que la pregunta solo define el comportamiento de los enteros.
fuente
¿Cuándo se convirtió esto en un código de golf? ¡Pensé que era un desafío de código encontrar el mejor algoritmo!
código-golf
APL, 33 caracteres
Esta es una búsqueda lineal simple, comenzando desde C = 1 + 10 -6 e incrementándola en 10 -6 hasta
log C log C log C ⋯ A ≤ 1
donde la función log C se aplica recursivamente B veces.
Ejemplos
Este código es muy lento, pero para bases pequeñas como 2 o 3 se completa en unos segundos. Vea a continuación para algo mejor.
desafío de código
APL, complejidad logarítmica
Complejidad realmente lineal en el orden raíz, logarítmica en el tamaño del resultado y precisión:
tiempo = O (B × log (C) + B × log (D))
donde B es el orden de la raíz, C es la base de la tetración que se solicita y D es el número de dígitos de precisión solicitados. Esta complejidad es mi comprensión intuitiva, no he presentado una prueba formal.
Este algoritmo no requiere números enteros grandes, solo usa la función de registro en números regulares de punto flotante, por lo tanto, es bastante eficiente en números muy grandes, hasta el límite de la implementación de punto flotante (ya sea doble precisión o números FP grandes arbitrarios en el Implementaciones de APL que las ofrecen.)
La precisión del resultado se puede controlar configurando
⎕CT
(tolerancia de comparación) el error aceptable deseado (en mi sistema, el valor predeterminado es 1e¯14, aproximadamente 14 dígitos decimales)No estoy seguro de si lo
1≥⍵⍟⍣n
anterior podría fallar con un Error de dominio (porque el registro de un argumento negativo podría fallar de inmediato o dar un resultado complejo, que no estaría en el dominio de≥
), pero no he podido encontrar Un caso que falla.Ejemplos
'3' sale como un valor exacto porque resulta ser uno de los valores directamente alcanzados por la búsqueda binaria (comenzando desde 2, doblado a 4, bisecado a 3). En el caso general de que eso no suceda, el resultado se aproximará al valor raíz con un error ⎕CT (más precisamente, la prueba logarítmica de cada base candidata se realiza con tolerancia ⎕CT).
fuente
Ruby, 79 bytes
Esto es lo mismo que el siguiente programa, pero menos preciso ya que solo ejecuta 99 bucles.
Rubí, 87 bytes
Pruébalo en línea
Esto es simplemente bisección. Sin golf:
fuente
k [52 caracteres]
Una versión modificada de mi propio puesto n º raíz
Ejemplo:
fuente
Haskell
Búsqueda lineal simple, devuelve primero, se encuentra la coincidencia más pequeña.
Ejemplo
fuente
Mathematica, 41 bytes sin optimización
Mathematica fue inventado básicamente para resolver problemas como este. Una solución fácil es construir el problema como una serie de potencia anidada y pasarlo a la
Reduce
función incorporada, que busca soluciones analíticas para las ecuaciones. Como resultado, lo siguiente, además de ser un código inusualmente conciso, tampoco es fuerza bruta.Puede eliminar la restricción para proporcionar solo soluciones de números reales si es paciente y desea guardar seis bytes. También puede expresar algunas de las funciones anidadas en forma abreviada para guardar algunos bytes más. Según lo dado, vuelve así
fuente
05AB1E , 16 bytes
Puerto de la respuesta Python de @KeithRandall .
Pruébalo en línea.
Explicación:
ÐU²FXm}
también podría serD²>и.»m
para el mismo número de bytes:fuente