Problem
Calculate x to the power y.
Constraint
Complexity should be less than O(n).
Solution
Suppose we are trying to calculate x to the power y and y is 4. Then we can do result=1; Then 4 times (result=result*x). In this way the complexity is O(n). In another way, we can do result=x*x; then we can do result =result *result; in this way the number of multiplication is 2 but y=4. So for power of 2s we can clearly see the number of multiplication is log(n) time. What happens for other numbers like when y=7. We can divide seven in 4+2+1. so x^(4+2+1)=(x^4) * (x^2) * (x^1).
So we can see that all powers are now divided into power of some numbers which are powers of 2. For example x^y where y is 13, we can do 8+4+1. Clearly we can see when y is represented in binary, the set bits are indicative of how to calculate the result. So whenever the bit is set multiply the powers to the result. and then do power=power*power for the next bit.
Code
public class CalculatePower
{
public static void main(String[] args)
{
int x = 4;
int y = 10;
long power = x;
long answer = 1;
while (y != 0)
{
if ((y & 1) == 1)
{
answer *= power;
}
y >>= 1;
power *= power;
}
System.out.println(answer);
}
}
No comments:
Post a Comment