Fast Exponentiation
Fast Exponentiation (Exponentiation by Squaring)
int fastExpo(int a, int b ) { int res = 1; // Result initialized to 1 // Loop until the exponent b becomes 0 while(b > 0) { // Check if the current bit of b is set (odd number) if(b & 1) { // If b is odd, multiply the result by the base 'a' res = res * a; } // Right shift b by 1 to process the next bit (equivalent to dividing b by 2) b = b >> 1; // Square the base 'a' for the next iteration a = a * a; } return res; // Return the result}Example:
int main() { int a = 3, b = 5; cout << "3^5 = " << fastExpo(a, b) << endl; return 0;}Step-by-Step Example: 3 5
- Initial values:
a = 3,b = 5,res = 1
Iteration 1:
b = 5(binary101):- The least significant bit of
bis 1 (odd), sores = res * a = 1 * 3 = 3. - Update
a = a * a = 3 * 3 = 9. - Right shift
b = b >> 1 = 2(binary10).
- The least significant bit of
Iteration 2:
b = 2(binary10):- The least significant bit of
bis 0 (even), so we don’t updateres. - Update
a = a * a = 9 * 9 = 81. - Right shift
b = b >> 1 = 1(binary1).
- The least significant bit of
Iteration 3:
b = 1(binary1):- The least significant bit of
bis 1 (odd), sores = res * a = 3 * 81 = 243. - Update
a = a * a = 81 * 81 = 6561. - Right shift
b = b >> 1 = 0(binary0).
- The least significant bit of
Final:
b = 0(exit the loop).- The result is
res = 243.
Thus, 35=243