Write a program to calculate pow(x,n)

27 Jun, 2022
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
Java
Python3
C#
PHP
Javascript
// 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
#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;}
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 program to calculate pow(x,n) # Function to calculate x# raised to the power ydef 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 Codex = 2; y = 3print(power(x, y)) # This code is contributed by Smitha Dinesh Semwal.
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// Function to calculate x// raised to the power yfunction 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?>
<script>// Javascript program to calculate pow(x,n) // Function to calculate x// raised to the power yfunction power(x, y){    if (y == 0)        return 1;    else if (y % 2 == 0)        return power(x, parseInt(y / 2, 10)) *               power(x, parseInt(y / 2, 10));    else        return x * power(x, parseInt(y / 2, 10)) *                   power(x, parseInt(y / 2, 10));} // Driver codelet x = 2;let y = 3; document.write(power(x, y)); // This code is contributed by mukesh07 </script>
Output : 
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
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. 
C++
C
Java
Python3
C#
Javascript
/* 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;} // This code is contributed by Shubhamsingh10
/* 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;}
/* Function to calculate x raised to the power y in O(logn)*/static int power(int x, 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;} // This code is contributed by divyeshrabadiya07.
# Function to calculate x raised to the power y in O(logn)def power(x,y):    temp = 0    if( y == 0):        return 1    temp = power(x, int(y / 2))    if (y % 2 == 0)        return temp * temp;    else        return x * temp * temp; # This code is contributed by avanitrachhadiya2155
/* Function to calculate x raised to the power y in O(logn)*/static int power(int x, 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;} // This code is contributed by divyesh072019.
<script> /* Function to calculate x raised to the power y in O(logn)*/function power(x , y){    var temp;    if( y == 0)        return 1;    temp = power(x, y / 2);    if (y % 2 == 0)        return temp*temp;    else        return x*temp*temp;} // This code is contributed by todaysgaurav </script>
Time Complexity of optimized solution: O(log(n))
Auxiliary Space: O(log(n))
Let us extend the pow function to work for negative y and float x. 
C++
C
Java
Python3
C#
PHP
Javascript
/* Extended version of power functionthat 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 Codeint main(){    float x = 2;    int y = -3;    cout << power(x, y);    return 0;} // This is code is contributed// by rathbhupendra
/* 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 code for extended version of power functionthat 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 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 Codex, y = 2, -3print('%.6f' %(power(x, y))) # This code is contributed by Smitha Dinesh Semwal.
// 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// 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?>
<script> // Javascript code for extended// version of power function that// can work for var x and negative yfunction power(x, y){    var temp;         if (y == 0)        return 1;             temp = power(x, parseInt(y / 2));     if (y % 2 == 0)        return temp * temp;    else    {        if (y > 0)            return x * temp * temp;        else            return (temp * temp) / x;    }} // Driver codevar x = 2;var y = -3; document.write( power(x, y).toFixed(6)); // This code is contributed by aashish1995 </script>
Output : 
0.125000
Time Complexity: O(log|n|)
Auxiliary Space: O(1)
Using recursion:
This approach is almost similar to iterative solution 
C++
C
Java
Python3
C#
Javascript
// C++ program for the above approach#include <bits/stdc++.h>using namespace std; int power(int x, int y){    // If x^0 return 1    if (y == 0)        return 1;    // If we need to find of 0^y    if (x == 0)        return 0;    // For all other cases    return x * power(x, y - 1);} // Driver Codeint main(){    int x = 2;    int y = 3;    cout << (power(x, y));} // This code is contributed by Aditya Kumar (adityakumar129)
// C program for the above approach#include <stdio.h> int power(int x, int y){    // If x^0 return 1    if (y == 0)        return 1;    // If we need to find of 0^y    if (x == 0)        return 0;    // For all other cases    return x * power(x, y - 1);} // Driver Codeint main(){    int x = 2;    int y = 3;    printf("%d\n",power(x, y));} // This code is contributed by Aditya Kumar (adityakumar129)
// Java program for the above approachimport java.io.*; class GFG {    public static int power(int x, int y)    {                 // If x^0 return 1        if (y == 0)            return 1;                 // If we need to find of 0^y        if (x == 0)            return 0;                 // For all other cases        return x * power(x, y - 1);    }       // Driver Code    public static void main(String[] args)    {        int x = 2;        int y = 3;         System.out.println(power(x, y));    }}
# Python3 program for the above approachdef power(x, y):         # If x^0 return 1    if (y == 0):        return 1         # If we need to find of 0^y    if (x == 0):        return 0         # For all other cases    return x * power(x, y - 1)  # Driver Codex = 2y = 3 print(power(x, y)) # This code is contributed by shivani.
// C# program for the above approachusing System; class GFG{     public static int power(int x, int y){         // If x^0 return 1    if (y == 0)        return 1;         // If we need to find of 0^y    if (x == 0)        return 0;         // For all other cases    return x * power(x, y - 1);} // Driver Codepublic static void Main(String[] args){    int x = 2;    int y = 3;     Console.WriteLine(power(x, y));}} // This code is contributed by Rajput-Ji
<script> // javascript program for the above approach    function power(x , y) {         // If x^0 return 1        if (y == 0)            return 1;         // If we need to find of 0^y        if (x == 0)            return 0;         // For all other cases        return x * power(x, y - 1);    }     // Driver Code             var x = 2;        var y = 3;         document.write(power(x, y)); // This code is contributed by Rajput-Ji </script>
Output:
8
Time Complexity: O(n)
Auxiliary Space: O(n)
Using Math.pow() function of java:
C++
Java
Python3
C#
Javascript
// C++ program for the above approach#include <bits/stdc++.h>using namespace std; int power(int x, int y){         // return type of pow()    // function is double    return (int)pow(x, y);} // Driver Codeint main(){    int x = 2;    int y = 3;     cout << (power(x, y));} // This code is contributed by hemantraj712.
// Java program for the above approachimport java.io.*; class GFG {    public static int power(int x, int y)    {                 // Math.pow() is a function that        // return floating number        return (int)Math.pow(x, y);    }       // Driver Code    public static void main(String[] args)    {        int x = 2;        int y = 3;         System.out.println(power(x, y));    }}
# Python3 program for the above approachdef power(x, y):         # Return type of pow()    # function is double    return pow(x, y)     # Driver Codex = 2y = 3 print(power(x, y)) # This code is contributed by susmitakundugoaldanga
// C# program for the above approach using System; public class GFG {     public static int power(int x, int y)    {                  // Math.pow() is a function that        // return floating number        return (int)Math.Pow(x, y);    }     // Driver code    static public void Main()    {        int x = 2;        int y = 3;          Console.WriteLine(power(x, y));    }}
<script> // Javascript program for the above approach     function power( x, y)    {                 // Math.pow() is a function that        // return floating number        return parseInt(Math.pow(x, y));    }     // Driver Code             let x = 2;        let y = 3;         document.write(power(x, y));         // This code is contributed by sravan kumar </script>
Output:
8
Time Complexity: O(1)
Auxiliary Space: O(1)
Iterative approach : Binary explanation
Some important concepts related to this approach:
Every number can be written as the sum of powers of 2
We can traverse through all the bits of a number from LSB to MSB in O(log(n)) time.
For example :
 3^10 = 3^8 + 3^2 ; (10 in binary can be represented as : 1010 , where from left side the first 1 represents 3^2 and second 1 represents 3^8 )
3^19 = 3^16 + 3^2+3 ; (19 in binary can be represented as : 10011 , where from left side the first 1 represents 3^1 and second 1 represents 3^2 and the 
third one represents 3^16 )
C++
Java
Python3
C#
Javascript
// C++ program for the above approach#include <iostream>using namespace std; int power(int x, int y){    int result = 1;    while (y > 0) {      if(y&1==1) // y is odd      {        result=result*x;      }      x=x*x;      y=y>>1; // y=y/2;    }    return result;} // Driver Codeint main(){    int x = 2;    int y = 3;     cout << (power(2, 3));    return 0;} // This code is contributed bySuruchi Kumari
// Java program for above approachclass GFG{ static int power(int x, int y){    int result = 1;    while (y > 0) {      if(y%2!=0) // y is odd      {        result=result*x;      }      x=x*x;      y=y>>1; // y=y/2;    }    return result;} // Driver Codepublic static void main(String[] args){    int x = 2;    int y = 3;         System.out.println(power(x, y));}} // This code is contributed by Suruchi Kumari
# Python program for the above approachdef power( x, y):     result = 1    while (y > 0):        if (y % 2 == 0):        # y is even                     x = x * x            y = y / 2                 else:        # y isn't even                     result = result * x            y = y - 1                  return result  # Driver Codex = 2y = 3print((power(x, y))) # This code is contributed by shivanisinghss2110
// C# program for above approachusing System; class GFG{ static int power(int x, int y){    int result = 1;         while (y > 0)    {                 // y is even        if (y % 2 == 0)        {            x = x * x;            y = y / 2;        }                 // y isn't even        else        {            result = result * x;            y = y - 1;        }    }    return result;} // Driver Codepublic static void Main(String[] args){    int x = 2;    int y = 3;         Console.Write(power(x, y));}} // This code is contributed by shivanisinghss2110
<script>// Javascript program for the above approach function power(x,y){    let result = 1;    while (y > 0) {        if (y % 2 == 0) // y is even        {            x = x * x;            y = Math.floor(y / 2);        }        else // y isn't even        {            result = result * x;            y = y - 1;        }    }    return result;} // Driver Codelet x = 2;let y = 3;document.write(power(x, y)) // This code is contributed by rag2127</script>
8
Time Complexity: O(log2y) 
Auxiliary Space: O(1)
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 write.geeksforgeeks.org or mail your article to review-team@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.
jit_t
SoumikMondal
rathbhupendra
divyeshrabadiya07
divyesh072019
avanitrachhadiya2155
SHUBHAMSINGH10
rohitsingh07052
le0
mukesh07
todaysgaurav
aashish1995
Rajput-Ji
sravankumar8128
souravghosh0416
ukasp
shivanisinghss2110
hemantraj712
susmitakundugoaldanga
madhav_mohan
souravmahato348
rag2127
hritikrommie
rishavmahato348
subham348
suruchikumarimfp4
krisania804
Amazon
MakeMyTrip
maths-power
Microsoft
Modular Arithmetic
Divide and Conquer
Mathematical
Amazon
Microsoft
MakeMyTrip
Mathematical
Divide and Conquer
Modular Arithmetic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.