Estou tentando encontrar o logaritmo de um número de base 3 usando python.
Aqui está o problema:
https://leetcode.com/problems/power-of-três/description/
Estou usando este código:
import math
math.log(k,3)
No entanto, está falhando em alguns casos de teste como (há mais alguns casos de teste):
math.log(243,3)
#output
4.999999999999999
math.log(59049,3)
#output
9.999999999999998
Não quero usar round()
porque arredondará outros números que não sejam potências de 3.
Aqui está o código completo que estou usando:
class Solution:
def isPowerOfThree(self, n: int) -> bool:
import math
k = abs(n)
if n<=0:
return False
return math.log(k,3) == int(math.log(k,3))
Obs: procuro soluções envolvendo logaritmos. Fique à vontade para solicitar quaisquer esclarecimentos.
Este é apenas um erro típico de ponto flutuante . Lembre-se de que quando você escreve
math.log(x, 3)
, o Python está na verdade calculando algo comomath.log(x) / math.log(3)
, com os cálculos de log (naturais) e a divisão tendo que ser arredondados para o mais próximofloat
.Mas se você fizer suas contas em
int
vez defloat
, a exatidão será preservada.Isso verifica se você pode dividir
n
por 3 (sem resto) até que o resultado seja 1.