Given two integers x and n, write a function to compute xn. We may assume that x and n are small and overflow doesn’t happen.

Examples :
Input : x = 2, n = 3 Output : 8 Input : x = 7, n = 2 Output : 49
Below solution divides the problem into subproblems of size y/2 and call the subproblems recursively.
C++
// C++ program to calculate pow(x,n) #include<iostream> using namespace std; class gfg { /* Function to calculate x raised to the power y */public: 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); } }; /* Driver code */int main() { gfg g; int x = 2; unsigned int y = 3; cout << g.power(x, y); return 0; } // This code is contributed by SoM15242 |
C
#include<stdio.h> /* 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); } /* Program to test function power */int main() { int x = 2; unsigned int y = 3; printf("%d", power(x, y)); return 0; } |
Java
class GFG { /* Function to calculate x raised to the power y */ static int power(int x, 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); } /* Program to test function power */ public static void main(String[] args) { int x = 2; int y = 3; System.out.printf("%d", power(x, y)); } } // This code is contributed by Smitha Dinesh Semwal |
Python3
# Python3 program to calculate pow(x,n) # Function to calculate x # raised to the power y def power(x, y): if (y == 0): return 1 elif (int(y % 2) == 0): return (power(x, int(y / 2)) * power(x, int(y / 2))) else: return (x * power(x, int(y / 2)) * power(x, int(y / 2))) # Driver Code x = 2; y = 3print(power(x, y)) # This code is contributed by Smitha Dinesh Semwal. |
C#
using System; public class GFG { // Function to calculate x raised to the power y static int power(int x, 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); } // Program to test function power public static void Main() { int x = 2; int y = 3; Console.Write(power(x, y)); } } // This code is contributed by shiv_bhakt. |
PHP
<?php // Function to calculate x // raised to the power y function power($x, $y) { if ($y == 0) return 1; else if ($y % 2 == 0) return power($x, (int)$y / 2) * power($x, (int)$y / 2); else return $x * power($x, (int)$y / 2) * power($x, (int)$y / 2); } // Driver Code $x = 2; $y = 3; echo power($x, $y); // This code is contributed by ajit ?> |
Output :
8
Time Complexity: O(n)
Space Complexity: O(1)
Algorithmic Paradigm: Divide and conquer.
Above function can be optimized to O(logn) by calculating power(x, y/2) only once and storing it.
/* 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; } |
Time Complexity of optimized solution: O(logn)
Let us extend the pow function to work for negative y and float x.
C++
/* Extended version of power function that can work for float x and negative y*/#include <bits/stdc++.h> using namespace std; float power(float x, int y) { float temp; if(y == 0) return 1; temp = power(x, y / 2); if (y % 2 == 0) return temp * temp; else { if(y > 0) return x * temp * temp; else return (temp * temp) / x; } } // Driver Code int main() { float x = 2; int y = -3; cout << power(x, y); return 0; } // This is code is contributed // by rathbhupendra |
C
/* Extended version of power function that can work for float x and negative y*/#include<stdio.h> float power(float x, int y) { float temp; if( y == 0) return 1; temp = power(x, y/2); if (y%2 == 0) return temp*temp; else { if(y > 0) return x*temp*temp; else return (temp*temp)/x; } } /* Program to test function power */int main() { float x = 2; int y = -3; printf("%f", power(x, y)); return 0; } |
Java
/* Java code for extended version of power function that can work for float x and negative y */class GFG { static float power(float x, int y) { float temp; if( y == 0) return 1; temp = power(x, y/2); if (y%2 == 0) return temp*temp; else { if(y > 0) return x * temp * temp; else return (temp * temp) / x; } } /* Program to test function power */ public static void main(String[] args) { float x = 2; int y = -3; System.out.printf("%f", power(x, y)); } } // This code is contributed by Smitha Dinesh Semwal. |
Python3
# Python3 code for extended version # of power function that can work # for float x and negative y def power(x, y): if(y == 0): return 1 temp = power(x, int(y / 2)) if (y % 2 == 0): return temp * temp else: if(y > 0): return x * temp * temp else: return (temp * temp) / x # Driver Code x, y = 2, -3print('%.6f' %(power(x, y))) # This code is contributed by Smitha Dinesh Semwal. |
C#
// C# code for extended version of power function // that can work for float x and negative y using System; public class GFG{ static float power(float x, int y) { float temp; if( y == 0) return 1; temp = power(x, y/2); if (y % 2 == 0) return temp * temp; else { if(y > 0) return x * temp * temp; else return (temp * temp) / x; } } // Program to test function power public static void Main() { float x = 2; int y = -3; Console.Write(power(x, y)); } } // This code is contributed by shiv_bhakt. |
PHP
<?php // Extended version of power // function that can work // for float x and negative y function power($x, $y) { $temp; if( $y == 0) return 1; $temp = power($x, $y / 2); if ($y % 2 == 0) return $temp * $temp; else { if($y > 0) return $x * $temp * $temp; else return ($temp * $temp) / $x; } } // Driver Code $x = 2; $y = -3; echo power($x, $y); // This code is contributed by ajit ?> |
Output :
0.125000
Write an iterative O(Log y) function for pow(x, y)
Modular Exponentiation (Power in Modular Arithmetic)
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
Recommended Posts:
- Write a program to reverse digits of a number
- Write a Program to Find the Maximum Depth or Height of a Tree
- Write an Efficient C Program to Reverse Bits of a Number
- Write a program to print all permutations of a given string
- Write a program to reverse an array or string
- Write a program to add two numbers in base 14
- Efficient program to calculate e^x
- C program to calculate the value of nPr
- Program to calculate the value of sin(x) and cos(x) using Expansion
- Program to calculate the number of odd days in given number of years
- Program to calculate distance between two points
- Program to calculate area and volume of a Tetrahedron
- Program to calculate value of nCr
- Program to calculate Area Of Octagon
- Program to calculate GST from original and net prices
- Program to calculate Percentile of a student based on rank
- Program to calculate the Surface Area of a Triangular Prism
- Program to calculate area of an Circle inscribed in a Square
- Program to calculate distance between two points in 3 D
- Program to calculate Profit Or Loss

