📖 Scenario: Imagine you are building a calculator app that needs to quickly compute powers of numbers, like calculating base raised to the exponent. Doing this by multiplying base repeatedly can be slow for large exponents.Fast exponentiation helps compute powers much faster by using a smart method that works in steps proportional to the logarithm of the exponent.
🎯 Goal: You will write a C++ program that calculates base raised to the power exponent using fast exponentiation (also called binary exponentiation). This method reduces the number of multiplications needed.
📋 What You'll Learn
Create two integer variables base and exponent with given values
Create an integer variable result initialized to 1
Use a while loop to apply fast exponentiation logic
Print the final result after the loop
💡 Why This Matters
🌍 Real World
Fast exponentiation is used in cryptography, computer graphics, and scientific computing where quick power calculations are needed.
💼 Career
Understanding fast exponentiation helps in optimizing algorithms and is a common interview question for software engineering roles.
Progress0 / 4 steps
1
Create base and exponent variables
Create two integer variables called base and exponent with values 3 and 5 respectively.
DSA C++
Hint
Use int base = 3; and int exponent = 5; to create the variables.
2
Initialize result variable
Create an integer variable called result and set it to 1.
DSA C++
Hint
Initialize result to 1 because multiplying by 1 does not change the value.
3
Apply fast exponentiation loop
Use a while loop that runs while exponent is greater than 0. Inside the loop, if exponent % 2 == 1, multiply result by base. Then square base by multiplying it by itself, and divide exponent by 2 using integer division.
DSA C++
Hint
Use the fast exponentiation steps: multiply result when exponent is odd, square base, then halve exponent.
4
Print the final result
Print the value of result using std::cout.
DSA C++
Hint
The output should be 243 because 3 to the power 5 is 243.
Practice
(1/5)
1. What is the main advantage of using fast exponentiation (power) algorithm over the simple repeated multiplication method?
easy
A. It works only for positive exponents
B. It reduces the time complexity from O(n) to O(log n)
C. It uses less memory by storing intermediate results
D. It avoids using multiplication altogether
Solution
Step 1: Understand simple exponentiation time
Simple repeated multiplication takes n multiplications for power n, so O(n) time.
Step 2: Analyze fast exponentiation time
Fast exponentiation splits power by half each step, reducing steps to about log n, so O(log n) time.
Final Answer:
It reduces the time complexity from O(n) to O(log n) -> Option B
Quick Check:
Fast exponentiation = O(log n) [OK]
Hint: Fast exponentiation halves power each step [OK]
Common Mistakes:
Thinking it avoids multiplication
Confusing time complexity with memory usage
Assuming it only works for positive exponents
2. Which of the following is the correct base case for a recursive fast exponentiation function computing x^n?
easy
A. if (x == 0) return 0;
B. if (x == 1) return n;
C. if (n == 1) return 0;
D. if (n == 0) return 1;
Solution
Step 1: Identify base case for exponent zero
Any number to the power 0 is 1, so if n == 0, return 1.
Step 2: Check other options
Other options do not correctly represent the base case for power calculation.
Final Answer:
if (n == 0) return 1; -> Option D
Quick Check:
Base case n=0 returns 1 [OK]
Hint: Power zero always returns 1 [OK]
Common Mistakes:
Returning 0 for n=1
Confusing base case with input x values
Returning n instead of 1 for base case
3. What is the output of the following C++ code snippet?
int fastPow(int x, int n) {
if (n == 0) return 1;
int half = fastPow(x, n / 2);
if (n % 2 == 0) return half * half;
else return half * half * x;
}
int main() {
std::cout << fastPow(2, 5);
return 0;
}
medium
A. 32
B. 16
C. 25
D. 10
Solution
Step 1: Trace recursive calls for fastPow(2,5)
fastPow(2,5) calls fastPow(2,2), which calls fastPow(2,1), which calls fastPow(2,0)=1.
Hint: Remember odd powers multiply extra x once [OK]
Common Mistakes:
Calculating 2^5 as 16 by missing odd case
Confusing multiplication order
Forgetting base case returns 1
4. The following code attempts to implement fast exponentiation but has a bug. What is the bug?
int fastPow(int x, int n) {
if (n == 0) return 1;
int half = fastPow(x, n / 2);
if (n % 2 == 0) return half * half;
else return half * half * n;
}
medium
A. Multiplying by n instead of x in the odd case
B. Missing base case for n == 1
C. Using integer division incorrectly
D. Not handling negative powers
Solution
Step 1: Check odd power multiplication
In the odd case, code multiplies by n instead of x, which is incorrect.
Step 2: Confirm correct multiplication
It should multiply by x to account for the extra factor in odd powers.
Final Answer:
Multiplying by n instead of x in the odd case -> Option A
Quick Check:
Odd power multiply by x, not n [OK]
Hint: Multiply by base x, not exponent n, for odd powers [OK]
Common Mistakes:
Confusing n and x in multiplication
Thinking base case missing causes this bug
Ignoring negative power handling
5. You want to compute (3^13) % 7 efficiently using fast exponentiation with modulo. Which of the following code snippets correctly implements this?
hard
A. int modPow(int x, int n, int m) {
if (n == 0) return 1;
int half = modPow(x, n / 2, m);
int halfSq = (half * half) % m;
if (n % 2 == 0) return (halfSq * x) % m;
else return halfSq;
}
B. int modPow(int x, int n, int m) {
if (n == 0) return 0;
int half = modPow(x, n / 2, m);
int halfSq = (half + half) % m;
if (n % 2 == 0) return halfSq;
else return (halfSq * x) % m;
}
C. int modPow(int x, int n, int m) {
if (n == 0) return 1;
int half = modPow(x, n / 2, m);
int halfSq = (half * half) % m;
if (n % 2 == 1) return (halfSq * x) % m;
else return halfSq;
}
D. int modPow(int x, int n, int m) {
if (n == 1) return x % m;
int half = modPow(x, n / 2, m);
int halfSq = (half * half) % m;
if (n % 2 == 1) return halfSq;
else return (halfSq * x) % m;
}
Solution
Step 1: Check base case and modulo usage
Base case returns 1 for n=0, correct. Multiplications use modulo to avoid overflow.
Step 2: Verify odd and even power handling
For odd n, multiply halfSq by x modulo m; for even n, return halfSq. int modPow(int x, int n, int m) {
if (n == 0) return 1;
int half = modPow(x, n / 2, m);
int halfSq = (half * half) % m;
if (n % 2 == 1) return (halfSq * x) % m;
else return halfSq;
} matches this logic correctly.
Final Answer:
code correctly implements fast exponentiation with modulo -> Option C
Quick Check:
Modulo applied after each multiplication [OK]
Hint: Apply modulo after every multiplication step [OK]
Common Mistakes:
Returning 0 for base case
Using addition instead of multiplication
Swapping odd and even cases
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.