We will discuss how to calculate the result when a number ‘x’ is raised to the power ‘y’.

Originally C provides a standard function that allows us to directly use the power function. It can be used in the following manner.

#include<stdio.h> //We need to import this file #include<math.h> int main(void) { int x =4; //calculates 4 ^ 3. int result = pow(x,3); printf("Result = %d",result); return 0;

Now suppose that we need to write a custom function by ourselves. Here are the sample methods by which we can do so.

**Simple Iterative method**

int power(int base, int num) { int result = 1; // this function will return base ^ num int i= 1; for(i = 1; i<=num; i++) result = result * base; return result; }

**Recursive Method**

int power_rec(int base, int num) { if(num == 0) return 1; if(num--) return base * power_rec(base, num); }

But in both these methods, the time complexity is of O(n), and this can take a long time in operation.

We can modify our code and take advantage of this property of maths:-

We can write 2^6 as (2*2*2) * (2*2*2)

That means, we can call the power function as power(base,num/2)

Here is the implementation of the same.

//Function to calculate x raised to the power y int power(int x, unsigned int y) { if( y == 0) return 1; else if (y%2 == 0) return power(x, y/2)*power(x, y/2); else return x*power(x, y/2)*power(x, y/2); }

The technique we are using here is Divide and Conquer. We can further reduce its complexity to **O(log n)** by calculating the result **power(base,num/2)** only once and then using it further.

/* Function to calculate x raised to the power y in O(logn)*/ int power(int x, unsigned int y) { int temp; if( y == 0) return 1; temp = power(x, y/2); if (y%2 == 0) return temp*temp; else return x*temp*temp; }

If we change the type of ‘temp’ to float and the return type of the function, we can use the above function for float values as well.