Skip to content
geeksforgeeks
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Tutorials
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
  • Practice
    • Build your AI Agent
    • GfG 160
    • Problem of the Day
    • Practice Coding Problems
    • GfG SDE Sheet
  • Contests
    • Accenture Hackathon (Ending Soon!)
    • GfG Weekly [Rated Contest]
    • Job-A-Thon Hiring Challenge
    • All Contests and Events
  • DSA
  • Practice Bitwise Algorithms
  • MCQs on Bitwise Algorithms
  • Tutorial on Biwise Algorithms
  • Binary Representation
  • Bitwise Operators
  • Bit Swapping
  • Bit Manipulation
  • Count Set bits
  • Setting a Bit
  • Clear a Bit
  • Toggling a Bit
  • Left & Right Shift
  • Gray Code
  • Checking Power of 2
  • Important Tactics
  • Bit Manipulation for CP
  • Fast Exponentiation
Open In App
Next Article:
C++ Program To Find Power Without Using Multiplication(*) And Division(/) Operators
Next article icon

Fast Exponentiation using Bit Manipulation

Last Updated : 18 Apr, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Given two integers A and N, the task is to calculate A raised to power N (i.e. AN).

Examples: 

Input: A = 3, N = 5 
Output: 243 
Explanation: 
3 raised to power 5 = (3*3*3*3*3) = 243

Input: A = 21, N = 4
Output: 194481 
Explanation: 
21 raised to power 4 = (21*21*21*21) = 194481 
 

Naive Approach: 
The simplest approach to solve this problem is to repetitively multiply A, N times and print the product. 

C++
#include <iostream> using namespace std;  // Function to calculate power using brute force approach long long findPower(int a, int n) {     long long result = 1;      // Multiply 'a' by itself 'n' times     for (int i = 0; i < n; ++i) {         result *= a;     }      return result; }  int main() {     int a = 3;     int n = 5;      // Calculate and display the result     long long result = findPower(a, n);     cout<<result<<endl;     return 0; } 
Java
public class Main {     // Function to calculate power using brute force approach     static long findPower(int a, int n) {         long result = 1;          // Multiply 'a' by itself 'n' times         for (int i = 0; i < n; ++i) {             result *= a;         }          return result;     }      public static void main(String[] args) {         int a = 3;         int n = 5;          // Calculate and display the result         long result = findPower(a, n);         System.out.println(result);     } } //This code is contributed by Aman 
Python3
# Function to calculate power using brute force approach def findPower(a, n):     result = 1      # Multiply 'a' by itself 'n' times     for i in range(n):         result *= a      return result  # Main function a = 3 n = 5  # Calculate and display the result result = findPower(a, n) print(result)  # This code is contributed by Yash Agarwal(yashagarwal2852002) 
C#
using System;  public class PowerCalculation {     // Function to calculate power using brute force approach     public static long FindPower(int a, int n)     {         long result = 1;          // Multiply 'a' by itself 'n' times         for (int i = 0; i < n; ++i)         {             result *= a;         }          return result;     }      public static void Main(string[] args)     {         int a = 3;         int n = 5;          // Calculate and display the result         long result = FindPower(a, n);         Console.WriteLine(result);     } } 
JavaScript
// Function to calculate power using brute force approach function findPower(a, n) {     let result = 1;      // Multiply 'a' by itself 'n' times     for (let i = 0; i < n; i++) {         result *= a;     }      return result; }  // Main function const a = 3; const n = 5;  // Calculate and display the result const result = findPower(a, n); console.log(result); //This code is contributed by Aman. 

Output
243  

Time Complexity: O(N) 
Auxiliary Space: O(1)

Efficient Approach: 
To optimize the above approach, the idea is to use Bit Manipulation. Convert the integer N to its binary form and follow the steps below:  

  • Initialize ans to store the final answer of AN.
  • Traverse until N > 0 and in each iteration, perform Right Shift operation on it.
  • Also, in each iteration, multiply A with itself and update it.
  • If current LSB is set, then multiply current value of A to ans.
  • Finally, after completing the above steps, print ans.

Below is the implementation of the above approach:

C++
// C++ Program to implement // the above approach #include <iostream> using namespace std;  // Function to return a^n int powerOptimised(int a, int n) {      // Stores final answer     int ans = 1;      while (n > 0) {          int last_bit = (n & 1);          // Check if current LSB         // is set         if (last_bit) {             ans = ans * a;         }          a = a * a;          // Right shift         n = n >> 1;     }      return ans; }  // Driver Code int main() {     int a = 3, n = 5;      cout << powerOptimised(a, n);      return 0; } 
Java
// Java program to implement  // the above approach  class GFG{   // Function to return a^n  static int powerOptimised(int a, int n)  {       // Stores final answer      int ans = 1;       while (n > 0)      {          int last_bit = (n & 1);           // Check if current LSB          // is set          if (last_bit > 0)         {              ans = ans * a;          }                   a = a * a;           // Right shift          n = n >> 1;      }      return ans;  }   // Driver Code  public static void main(String[] args)  {      int a = 3, n = 5;       System.out.print(powerOptimised(a, n));  } }  // This code is contributed by PrinciRaj1992 
Python3
# Python3 program to implement # the above approach  # Function to return a^n def powerOptimised(a, n):          # Stores final answer      ans = 1          while (n > 0):         last_bit = (n & 1)                  # Check if current LSB          # is set          if (last_bit):             ans = ans * a         a = a * a                  # Right shift          n = n >> 1              return ans  # Driver code if __name__ == '__main__':          a = 3     n = 5          print(powerOptimised(a,n))  # This code is contributed by virusbuddah_ 
C#
// C# program to implement  // the above approach  using System;  class GFG{   // Function to return a^n  static int powerOptimised(int a, int n)  {           // Stores readonly answer      int ans = 1;       while (n > 0)      {          int last_bit = (n & 1);           // Check if current LSB          // is set          if (last_bit > 0)          {              ans = ans * a;          }          a = a * a;           // Right shift          n = n >> 1;      }      return ans;  }   // Driver Code  public static void Main(String[] args)  {      int a = 3, n = 5;       Console.Write(powerOptimised(a, n));  }  }   // This code is contributed by Princi Singh 
JavaScript
// JavaScript program to implement // the above approach  // Function to return a^n  function powerOptimised(a, n)  {      // Stores final answer      let ans = 1;         while (n > 0)      {          let last_bit = (n & 1);             // Check if current LSB          // is set          if (last_bit > 0)         {              ans = ans * a;          }                     a = a * a;             // Right shift          n = n >> 1;      }      return ans;  }    // Driver Code let a = 3, n = 5;   console.log(powerOptimised(a, n));  

Output
243 

Time Complexity: O(logN) 
Auxiliary Space: O(1)

Another efficient approach : Recursive exponentiation

Recursive exponentiation is a method used to efficiently compute AN, where A & N are integers. It leverages recursion to break down the problem into smaller subproblems. Follow the steps below :

  • If N = 0, the result is always 1 because any non zero number raised to the power of 0 is 1.
  • If N is even, we can compute AN as (AN/2)2 . This is done by recursively computing AN/2 & squaring the result.
  • If N is odd, we compute AN as A * AN – 1 . Again, we recursively compute AN -1 & multiply the result by A.

Below is the implementation of the above approach :

C++
#include <iostream> using namespace std;  // Function to calculate A raised to the power N using recursion long long recursive_exponentiation(long long A, long long N) {     if (N == 0) {         // Base case: A^0 = 1         return 1;     } else if (N % 2 == 0) {         // If N is even, recursively compute A^(N/2) and square it         long long temp = recursive_exponentiation(A, N / 2);         return temp * temp;     } else {         // If N is odd, recursively compute A^(N-1) and multiply by A         return A * recursive_exponentiation(A, N - 1);     } }  int main() {     // Test case     cout << recursive_exponentiation(3, 5);     return 0; } 
Java
public class RecursiveExponentiation {     // Function to calculate A raised to the power N using recursion     public static long recursiveExponentiation(long A, long N) {         if (N == 0) {             // Base case: A^0 = 1             return 1;         } else if (N % 2 == 0) {             // If N is even, recursively compute A^(N/2) and square it             long temp = recursiveExponentiation(A, N / 2);             return temp * temp;         } else {             // If N is odd, recursively compute A^(N-1) and multiply by A             return A * recursiveExponentiation(A, N - 1);         }     }      public static void main(String[] args) {         // Test case         System.out.println(recursiveExponentiation(3, 5));     } } 
Python
def recursive_exponentiation(A, N):     if N == 0:         return 1     elif N % 2 == 0:         # If N is even, recursively compute A^(N/2) and square it         temp = recursive_exponentiation(A, N // 2)         return temp * temp     else:         # If N is odd, recursively compute A^(N-1) and multiply by A         return A * recursive_exponentiation(A, N - 1)  # Test cases print(recursive_exponentiation(3, 5))   
JavaScript
// Function to calculate A raised to the power N using recursion function recursiveExponentiation(A, N) {     if (N === 0) {         // Base case: A^0 = 1         return 1;     } else if (N % 2 === 0) {         // If N is even, recursively compute A^(N/2) and square it         const temp = recursiveExponentiation(A, N / 2);         return temp * temp;     } else {         // If N is odd, recursively compute A^(N-1) and multiply by A         return A * recursiveExponentiation(A, N - 1);     } }  // Test case console.log(recursiveExponentiation(3, 5)); 

Output
243  

Complexity Analysis :

Time Complexity: O(logN) 

Auxiliary Space: O(1)



Next Article
C++ Program To Find Power Without Using Multiplication(*) And Division(/) Operators

T

theamanamanaman
Improve
Article Tags :
  • Algorithms
  • Bit Magic
  • C++ Programs
  • DSA
  • Mathematical
  • Bitwise-AND
  • maths-power
Practice Tags :
  • Algorithms
  • Bit Magic
  • Mathematical

Similar Reads

  • How to Use Bit Manipulation Methods in C++
    Bit manipulation is a technique used for optimizing performance and memory usage in various programming scenarios. It is very useful from a Competitive Programming point of view. In this article, we will learn how we can use bit manipulation methods in C++ and provide examples to help you understand
    5 min read
  • C++ Program To Find Power Without Using Multiplication(*) And Division(/) Operators
    Method 1 (Using Nested Loops):We can calculate power by using repeated addition. For example to calculate 5^6. 1) First 5 times add 5, we get 25. (5^2) 2) Then 5 times add 25, we get 125. (5^3) 3) Then 5 times add 125, we get 625 (5^4) 4) Then 5 times add 625, we get 3125 (5^5) 5) Then 5 times add 3
    3 min read
  • How to Set, Clear, and Toggle a Single Bit in C++?
    In bit manipulation, setting a bit, clearing a bit, and toggling a single bit are basic operations. We can easily carry out these operations using the bitwise operators in C++. In this article, we will see how to set, clear, and toggle operations on the Kth bit. Example Input: N = 15, K = 0Output: S
    3 min read
  • Check if Decimal representation of given Binary String is divisible by K or not
    Given a binary string S, the task is to find that the decimal representation of the given binary string is divisible by integer K or not. Examples: Input: S = 1010, k = 5Output: YesExplanation: Decimal representation of 1010 (=10) is divisible by 5 Input: S = 1010, k = 6Output: No Approach: Since th
    6 min read
  • Find the remainder when N is divided by 4 using Bitwise AND operator
    Given a number N, the task is to find the remainder when N is divided by 4 using Bitwise AND operator. Examples: Input: N = 98 Output: 2Explanation: 98 % 4 = 2. Hence the output is 2. Input: 200Output: 0Explanation: 200 % 4 = 0. Hence output is 0. Recommended: Please try your approach on {IDE} first
    9 min read
  • Bit Magic C/C++ Programs
    Bit manipulation, also known as bit magic is the process of using bit-level operations to manipulate individual bits of a number. It uses bitwise operators such as AND, OR, XOR, right shift, etc. to manipulate, set, and shift the individual bits. This is used to improve the efficiency of our program
    3 min read
  • C++ Program For Binary To Decimal Conversion
    The binary number system uses only two digits 0 and 1 to represent an integer and the Decimal number system uses ten digits 0 to 9 to represent a number. In this article, we will discuss the program for Binary to Decimal conversion in C++. Algorithm to Convert Binary Numbers to DecimalInitialize a v
    4 min read
  • C++ Program For Decimal To Binary Conversion
    Binary Numbers uses only 0 and 1 (base-2), while Decimal Number uses 0 to 9 (base-10). In this article, we will learn to implement a C++ program to convert Decimal numbers to Binary Numbers. The below diagram shows an example of converting the decimal number 17 to an equivalent binary number. Recomm
    3 min read
  • First and Last Three Bits
    Given an integer N. The task is to print the decimal equivalent of the first three bits and the last three bits in the binary representation of N.Examples: Input: 86 Output: 5 6 The binary representation of 86 is 1010110. The decimal equivalent of the first three bits (101) is 5. The decimal equival
    13 min read
  • C++ Program to Rotate bits of a number
    Bit Rotation: A rotation (or circular shift) is an operation similar to shift except that the bits that fall off at one end are put back to the other end. In left rotation, the bits that fall off at left end are put back at right end. In right rotation, the bits that fall off at right end are put ba
    3 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences