Dados inteiros N , P > 1
, encontre o maior número inteiro M
tal que P ^ M ≤ N
.
E / S:
A entrada é fornecida como 2 números inteiros N
e P
. A saída será o número inteiro M
.
Exemplos:
4, 5 -> 0
33, 5 -> 2
40, 20 -> 1
242, 3 -> 4
243, 3 -> 5
400, 2 -> 8
1000, 10 -> 3
Notas:
A entrada sempre será válida, ou seja, sempre serão números inteiros maiores que 1.
Créditos:
O crédito para o nome vai para @cairdcoinheringaahing. Os últimos 3 exemplos são de @Nitrodon e os créditos para melhorar a descrição vão para @Giuseppe.
code-golf
math
number
arithmetic
Muhammad Salman
fonte
fonte
Respostas:
Flacidez Cerebral , 74 bytes
Experimente online!
Isso usa o mesmo conceito que o algoritmo padrão de divisão inteira positiva Brain-Flak.
fonte
JavaScript (ES6), 22 bytes
Guardado 8 bytes graças a @Neil
Recebe entrada na sintaxe de currying
(p)(n)
.Experimente online!
fonte
Excel, 18 bytes
Pega a entrada "n" em A1 e a entrada "p" em A2.
fonte
INT
função em vez deTRUNC
salvar 2 bytes.Geléia , 3 bytes
Isso não usa aritmética de ponto flutuante; portanto, não há problemas de precisão.
Experimente online!
Como funciona
fonte
Retina 0.8.2 , 35 bytes
Experimente online! Explicação:
Converta os argumentos em unário.
Se o segundo argumento dividir o primeiro, substitua o primeiro por um
#
mais o resultado inteiro, descartando o restante. Repita isso até que o primeiro argumento seja menor que o segundo.Conte o número de vezes que o loop foi executado.
fonte
Japonês, 8 bytes
Tente
fonte
F.g()
- mas eles são incrivelmente úteis.Haskell , 30 bytes
Experimente online!
fonte
until((>n).(p^))(1+)0-1
ouuntil(\x->p^x*p>n)(1+)0
você recebe até 27 bytes.Perl 6 , 13 bytes
Experimente online!
A concatenação que compõe o log e o piso tem implicitamente 2 argumentos porque o primeiro log da função espera 2. O resultado é uma função.
fonte
1000, 10
isso retorna 2.Haskell , 16 bytes
Experimente online!
O Haskell foi projetado por matemáticos, por isso possui um bom conjunto de funções relacionadas à matemática no Prelude.
fonte
R , 25 bytes
Experimente online!
Pegue o log de
P
baseN
e faça a divisão inteira com1
, pois é mais curto quefloor()
. Isso sofre um pouco com a precisão numérica, por isso apresento a resposta abaixo também, que não deveria, além de possivelmente um excesso de número inteiro.R , 31 bytes
Experimente online!
fonte
p
porp+.1
na resposta 25 byte e você ainda vai ficar bem, por 28 bytesPython 2 , 39 bytes
Experimente online!
fonte
Ruby , 31 bytes
OK, todas essas abordagens baseadas em log são propensas a erros de arredondamento, então aqui está outro método que funciona com números inteiros e está livre desses problemas:
Experimente online!
Mas voltando aos logaritmos, embora não esteja claro até que precisão devemos apoiar a entrada, mas acho que esse pequeno truque resolveria o problema de arredondamento para todos os números mais ou menos "realistas":
Ruby , 29 bytes
Experimente online!
fonte
C (gcc) +
-lm
, 24 bytesExperimente online!
fonte
long long
mas o que ébytes bytes
? : Pf(n,m){n=(float)log(n)/log(m);}
parece funcionar @ 31 bytesEmojicode ,
4948 bytesExperimente online!
fonte
APL (Dyalog Unicode) , 2 bytes
Experimente online!
Bem direto.
⍟
Registro⌊
chãofonte
⌊⍟
05AB1E , 6 bytes
Experimente online!
fonte
JavaScript ,
4033 bytes-3 bytes graças a DanielIndie
Recebe entrada na sintaxe de currying.
Experimente online!
fonte
toString
solução só funciona para bases até 36.Pari / GP, 6 bytes
(interno adicionado na versão 2.7, março de 2014. Leva dois argumentos, com uma terceira referência opcional que, se presente, é definida como a base elevada para o resultado)
fonte
logint
que é válido e conta 5 bytes a menos.Python 2, 3, 46 bytes
-1 graças a Jonathan
Python 1, 47 bytes
fonte
n~-i
é um byte menor quen i-1
.JavaScript (Node.js) , 22 bytes
Experimente online!
Função recursiva com curry. Use como
g(P)(N)
. Menos propenso a erros de ponto flutuante do que o usoMath.log
e (acredito) o código fornece valores corretos desde que ambas as entradas sejam números inteiros seguros (abaixo2**52
).fonte
Haskell ,
3534 bytesObrigado @Laikoni por economizar 1 byte
Experimente online!
fonte
J , 5 bytes
Experimente online!
fonte
Wolfram Language (Mathematica)
1510 bytes(requer ordem inversa na entrada)
Submissão original
fonte
⌊Log@##⌋&
é um byte menorQuarto (gforth) , 35 bytes
Experimente online!
Poderia economizar 5 bytes trocando os parâmetros de entrada esperados, mas a pergunta especifica que N deve ser o primeiro (um argumento pode ser feito que, em uma linguagem pós-fixada, "Primeiro" significa o topo da pilha, mas vou seguir a letra das regras para agora)
Explicação
fonte
Pitão,
64 bytesEconomizou 2 bytes graças ao Mmenomic
Experimente online
Como funciona
.l
é o log B (A)Para ser sincero, não tenho ideia de como
F
funciona. Mas se funcionar, funciona.s
trunca um float para um int para nos fornecer o número inteiro mais alto paraM
.fonte
/FlM
Maravilha , 9 bytes
Exemplo de uso:
Explicação
Versão detalhada:
Este é um estilo sem ponto escrito.
sS
passa os itens da lista como argumentos para uma função (neste caso,log
).fonte
Gforth , 31 bytes
Uso
Experimente online!
Explicação
Infelizmente, o FORTH usa uma pilha de ponto flutuante dedicada. Para isso, tenho que
SWAP
(trocar) os valores de entrada para que eles cheguem à pilha de ponto flutuante na ordem certa. Eu também tenho que mover os valores para essa pilha comS>F
. Ao mover o resultado de ponto flutuante de volta para inteiro (F>S
), tenho o benefício de obter o truncamento gratuitamente.Versão mais curta
Ampliando os requisitos e fornecendo a entrada no formato flutuante e na ordem correta, existe uma versão mais curta com 24 bytes.
Experimente online!
fonte
: f .... ;
ou uma convertida para um programa que recebe a entrada usandoKEY
ouACCEPT
Casca ,
874 bytesExperimente online!
fonte
C (gcc) , 61 bytes
Experimente online!
fonte
Japonês , 5 bytes
Experimente online!
8 bytes
Experimente online!
fonte
ì
vez des
comos
falhará seV>36
.V>36
.