Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Logarithm to base 3 in python

I am trying to find the logarithm of a number to base 3 using python.

Here is the problem :

https://leetcode.com/problems/power-of-three/description/

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I am using this code:

import math
math.log(k,3)

However, it is failing for some test cases like (there are some more test cases):

math.log(243,3)

#output
4.999999999999999

math.log(59049,3)

#output
9.999999999999998

I do not want to use round() as it will round other numbers which are not the powers of 3.

Here is the full code which I am using:

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))

Note: I am looking for solutions involving logarithms. Please feel free to ask for any clarifications.

>Solution :

This is just typical floating-point error. Recall that when you write math.log(x, 3), Python is actually calculating something like math.log(x) / math.log(3), with both (natural) log calculations and the division having to be rounded to the nearest float.

But if you do your math with int instead of float, exactness is preserved.

def is_power_of_three(n):
    if n <= 0:
        return False
    while n > 1:
        n, r = divmod(n, 3)
        if r != 0:
            return False
    return n == 1

This checks if you can divide n by 3 (without remainder) until the result is 1.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading