Votre tâche consiste à calculer lentement l'exponentiation, en procédant comme suit:
Étant donné deux entrées (dans cet exemple, 4 et 8), vous devez calculer l'exponentiation en calculant l'équation bit par bit. Vous feriez 4^8
, avoir une plus grande valeur de base (4) et un exposant plus petit (8). Vous pouvez le faire en utilisant plus d'exponentiation et de division. Vous pouvez diviser l'exposant par une valeur X (à condition que X soit le premier diviseur de l'exposant) et faire de la valeur de base ( B ) B^X
. Par exemple, vous pouvez faire:
4^8 = (4 ^ 2)^(8 / 2) = 16^4
J'ai remplacé X par 2 dans l'équation précédente.
Vous pouvez «simplifier» 16^4
davantage, encore une fois avec X = 2
:
16^4 = (16 ^ 2)^(4 / 2) = 256^2
Et puis finalement calculer un nombre (encore une fois X = 2
):
256^2 = (256 ^ 2)^(2 / 2) = 65536^1 = 65536
Donc,
4^8 = 16^4 = 256^2 = 65536
C'est la sortie que vous devez donner. Le séparateur de sortie est un peu flexible, par exemple, vous pouvez séparer les équations par des sauts de ligne ou des espaces au lieu de =
. Ou, vous pouvez les mettre dans une liste (mais vous ne devez pas utiliser un chiffre ou le ^
caractère comme séparateur).
Comme l'a souligné Martin Ender, le ^
est également flexible. Par exemple, vous pouvez utiliser [A, B]
ou A**B
au lieu de A^B
dans la sortie.
X ne peut être que premier, ce qui signifie que vous ne pouvez pas utiliser X = 8
pour accéder directement à la solution, et les valeurs de X ne seront que des facteurs premiers de la deuxième entrée (l'exposant).
Exemples:
(input) -> (output)
4^8 -> 4^8=16^4=256^2=65536
5^11 -> 5^11=48828125
2^15 -> 2^15=32^3=32768 (2^15=8^5=32768 is also a valid output)
Gardez à l'esprit que le format d'entrée est également flexible (par exemple, vous pouvez prendre A \n B
ou à la A B
place de A^B
. Évidemment, ce ne serait pas un problème si vous écrivez une fonction en prenant deux arguments.
Dans le deuxième exemple, nous allons directement au calcul, car 11
est premier et nous ne pouvons plus faire de pas.
Vous pouvez écrire un programme ou une fonction pour résoudre ce problème, et vous pouvez imprimer ou renvoyer la valeur, respectivement.
Comme il s'agit de code-golf , le code le plus court gagne!
32^3
et8^15
ne sont pas 512 non plus.x^1
?Réponses:
Gelée , 16 octets
Essayez-le en ligne!
L'entrée est une liste unique
[base, exponent]
. La valeur de retour du lien monadique inférieur est une liste de listes, comme un programme complet une représentation de cette liste est imprimée, par exemple2^15=8^5=32768^1
est imprimée comme:Comment?
Il pourrait être formaté comme une grille de 2 octets par une fin
µG
, par exemple:... ou entièrement formaté, y compris le découpage du
^1
, pour 9, avec un trait de finj€”^j”=ṖṖ
, par exemple:la source
JavaScript (ES7), 55 octets
Utilise
,
à la place de=
(2^15,8^5,32768
).Cas de test
Afficher l'extrait de code
Remarque: l'extrait de code utilise à la
Math.pow
place de**
pour la compatibilité entre les navigateurs.la source
05AB1E ,
232217 octetsEnregistré 5 octets en remarquant le format de sortie flexible.
Essayez-le en ligne!
Explication
Exemple pour
2^15
la source
C,
125, 123 + 4 (-lm
) =129127 octetsPrend un double et un entier.
Essayez-le en ligne!
la source
Haskell, 64 octets
Exemple d'utilisation:
2 # 32
->[[2,32],[4,16],[16,8],[256,4],[65536,2],[4294967296]]
. Essayez-le en ligne! .Comment ça fonctionne:
la source
Utilitaires Bash + GNU, 82
Script shell récursif. Cela ne semble pas fonctionner dans TIO, mais fonctionne correctement lorsqu'il est enregistré en tant que script et exécuté:
la source