En mathématiques, la tétration est l'hyper opérateur suivant après l'exponentiation, et est définie comme l'exponentiation itérée.
Addition ( a réussi n fois)
Multiplication ( a ajouté à lui-même, n fois)
Exponentiation ( a multipliée par elle-même, n fois)
Tétration ( un exponentielles par lui - même, n fois)
Les relations inverses de la tétration sont appelées la super-racine et le super-logarithme. Votre tâche est d'écrire un programme qui, étant donné A et B, imprime B e -order super-racine de A.
Par exemple:
- si A =
65,536
et B =4
il imprime2
- si A =
7,625,597,484,987
et B =3
il imprime3
A et B sont des entiers positifs et le résultat doit être un nombre à virgule flottante avec une précision de 5 chiffres après la virgule décimale. Le résultat appartient au domaine réel.
Attention, les super-racines peuvent avoir de nombreuses solutions.
Réponses:
C - viser la clarté, n'a pas tenté de presser le code
Considérant l'entrée:
Ensuite, il ne devrait généralement y avoir qu'une seule solution dans ℝ, ce qui simplifie considérablement le problème.
Le code est:
Compiler:
Courir:
Par exemple:
4 2
3 3
3 π
n (2 ½ ) ➙ 2 comme n ➙ ∞? (limite bien connue)
Oui!
n (e 1 / e ) ➙ ∞ comme n ➙ ∞? (limites supérieures)
Cool! (e 1 / e ≅ 1.44466786101 ...)
la source
Python, 87 caractères
Une simple recherche linéaire de la réponse.
Hors sujet, mais qu'est-ce que * # $ (@! Est en place avec l'
**
opérateur python ?la source
(1e200)**2
à1e(200**2)
?OverflowError
dans le premier cas.Mathematica,
3540Génère une liste de toutes les solutions, avec une précision à 5 chiffres.
5 caractères supplémentaires pour obtenir uniquement la vraie solution, comme l'exigent les règles mises à jour.
la source
Julia
Instruction en virgule flottante ignorée car la question définit uniquement le comportement des entiers.
la source
Quand est-ce devenu un golf à code? Je pensais que c'était un défi de code pour trouver le meilleur algorithme!
code-golf
APL, 33 caractères
Il s'agit d'une simple recherche linéaire, partant de C = 1 + 10 -6 et l'incrémentant de 10 -6 jusqu'à
log C log C log C ⋯ A ≤ 1
où la fonction log C est appliquée récursivement B fois.
Exemples
Ce code est très lent, mais pour les petites bases comme 2 ou 3, il se termine en quelques secondes. Voir ci-dessous pour une meilleure chose.
code-challenge
APL, complexité logarithmique
Complexité réellement linéaire sur l'ordre racine, logarithmique sur la taille et la précision du résultat:
temps = O (B × log (C) + B × log (D))
où B est l'ordre des racines, C est la base de tétration demandée et D est le nombre de chiffres de précision demandés. Cette complexité est ma compréhension intuitive, je n'ai pas produit de preuve formelle.
Cet algorithme ne nécessite pas de grands entiers, il n'utilise la fonction log que sur les nombres à virgule flottante réguliers, il est donc assez efficace sur les très grands nombres, jusqu'à la limite de l'implémentation à virgule flottante (soit en double précision, soit en arbitraire de grands nombres FP sur le Implémentations APL qui les proposent.)
La précision du résultat peut être contrôlée en définissant
⎕CT
(tolérance de comparaison) sur l'erreur acceptable souhaitée (sur mon système, elle vaut par défaut 1e¯14, soit environ 14 chiffres décimaux)Je ne suis pas sûr que ce qui
1≥⍵⍟⍣n
précède puisse échouer avec une erreur de domaine (car le journal d'un argument négatif pourrait soit échouer immédiatement, soit donner un résultat complexe, qui ne serait pas dans le domaine de≥
) mais je n'ai pas pu trouver un cas qui échoue.Exemples
'3' apparaît comme une valeur exacte car il se trouve que c'est l'une des valeurs directement frappées par la recherche binaire (à partir de 2, doublée à 4, bissectée à 3). Dans le cas général qui ne se produit pas, le résultat se rapproche donc de la valeur racine avec une erreur ⎕CT (plus précisément, le test logarithmique de chaque base candidate est effectué avec une tolérance ⎕CT.)
la source
Rubis, 79 octets
C'est le même que le programme ci-dessous, mais moins précis car il n'exécute que 99 boucles.
Rubis, 87 octets
Essayez-le en ligne
C'est simplement une bissection. Non golfé:
la source
k [52 caractères]
Une version modifiée de mon propre post n ième racine
Exemple:
la source
Haskell
Recherche linéaire simple, renvoie d'abord, la plus petite correspondance trouvée.
Exemple
la source
Mathematica, 41 octets sans optimisation
Mathematica a été inventé pour résoudre des problèmes comme celui-ci. Une solution simple consiste à construire le problème sous la forme d'une série de puissances imbriquées et à le transmettre à la
Reduce
fonction intégrée, qui recherche des solutions analytiques aux équations. En conséquence, ce qui suit, en plus d'être du code inhabituellement concis, n'est pas non plus une force brute.Vous pouvez supprimer la restriction pour ne fournir que des solutions de nombre réel si vous êtes patient et souhaitez économiser six octets. Vous pouvez également exprimer certaines des fonctions imbriquées sous forme abrégée pour économiser quelques octets supplémentaires. Comme indiqué, il revient ainsi
la source
05AB1E , 16 octets
Port de la réponse Python de @KeithRandall .
Essayez-le en ligne.
Explication:
ÐU²FXm}
pourrait également êtreD²>и.»m
pour le même nombre d'octets:la source