Search code examples
algorithmmath

Check if one integer is an integer power of another


This is an interview question: "Given 2 integers x and y, check if x is an integer power of y" (e.g. for x = 8 and y = 2 the answer is "true", and for x = 10 and y = 2 "false").

The obvious solution is:

int n = y; while(n < x) n *= y; return n == x

Now I am thinking about how to improve it.

Of course, I can check some special cases: e.g. both x and y should be either odd or even numbers, i.e. we can check the least significant bit of x and y. However I wonder if I can improve the core algorithm itself.


Solution

  • You'd do better to repeatedly divide y into x. The first time you get a non-zero remainder you know x is not an integer power of y.

    while (x%y == 0)  x = x / y
    return x == 1
    

    This deals with your odd/even point on the first iteration.