Sua tarefa é calcular lentamente a exponenciação, com as seguintes etapas:
Dadas duas entradas (neste exemplo, 4 e 8), você deve calcular a exponenciação calculando a equação pouco a pouco. Você faria 4^8
, teria um valor base maior (4) e um expoente menor (8). Você pode fazer isso usando mais exponenciação e divisão. Você pode dividir o expoente por um valor X (desde que X seja um divisor principal do expoente) e transformar o valor base ( B ) em B^X
. Por exemplo, você pode fazer:
4^8 = (4 ^ 2)^(8 / 2) = 16^4
Substituí X por 2 na equação anterior.
Você pode 'simplificar' 16^4
ainda mais, novamente com X = 2
:
16^4 = (16 ^ 2)^(4 / 2) = 256^2
E, finalmente, calcule um número (novamente X = 2
):
256^2 = (256 ^ 2)^(2 / 2) = 65536^1 = 65536
Portanto,
4^8 = 16^4 = 256^2 = 65536
Esta é a saída que você deve fornecer. O separador de saída é um pouco flexível; por exemplo, é possível separar as equações por novas linhas ou espaços em vez de =
. Ou, você pode colocá-los em uma lista (mas não deve usar um dígito ou o ^
caractere como separador).
Como Martin Ender apontou, o ^
também é flexível. Por exemplo, você pode usar [A, B]
ou em A**B
vez de A^B
na saída.
X pode ser apenas primo, o que significa que você não pode usar X = 8
para ir direto à solução, e os valores de X serão apenas fatores primos da segunda entrada (o expoente).
Exemplos:
(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)
Lembre-se de que o formato de entrada também é flexível (por exemplo, você pode usar A \n B
ou A B
não A^B
. Obviamente, isso não seria um problema se você escrever uma função usando dois argumentos.
No segundo exemplo, vamos direto ao cálculo, pois 11
é primo e não podemos dar mais passos.
Você pode escrever um programa ou uma função para resolver isso e pode imprimir ou retornar o valor, respectivamente.
Como esse é o código-golfe , esse código mais curto vence!
32^3
e8^15
não são 512 também.x^1
?Respostas:
Gelatina , 16 bytes
Experimente online!
A entrada é uma lista única
[base, exponent]
. O valor de retorno do link monádico inferior é uma lista de listas, como um programa completo, uma representação dessa lista é impressa, por exemplo,2^15=8^5=32768^1
é impressa como:Quão?
Pode ser formatado como uma grade para 2 bytes por um final
µG
, por exemplo:... ou totalmente formatado, incluindo aparar o
^1
, para 9, com um finalj€”^j”=ṖṖ
, por exemplo:fonte
JavaScript (ES7), 55 bytes
Usa
,
no lugar de=
(2^15,8^5,32768
).Casos de teste
Mostrar snippet de código
Nota: o snippet usa em
Math.pow
vez de**
para compatibilidade entre navegadores.fonte
05AB1E ,
232217 bytesEconomizou 5 bytes observando o formato de saída flexível.
Experimente online!
Explicação
Exemplo para
2^15
fonte
C,
125123 + 4 (-lm
) =129127 bytesToma um duplo e um inteiro.
Experimente online!
fonte
Haskell, 64 bytes
Exemplo de uso:
2 # 32
->[[2,32],[4,16],[16,8],[256,4],[65536,2],[4294967296]]
. Experimente online! .Como funciona:
fonte
Utilitários Bash + GNU, 82
Script de shell recursivo. Isso não parece funcionar no TIO, mas funciona bem quando salvo como um script e executado:
fonte