# Write a program to calculate pow(x,n)

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

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

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 ` `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 ` ` `  `/* 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 ``=` `3` `print``(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

 ` `

Output :

`8`

Time Complexity: O(n)
Space Complexity: O(1)

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 ` `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 ` ` `  `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``, ``-``3` `print``(``'%.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

 ` 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.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up

Article Tags :

45

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.