Bird
Raised Fist0
DSA C++programming~10 mins

Fast Exponentiation Power in Log N in DSA C++ - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to multiply the result by x when n is odd.

DSA C++
if (n % 2 == 1) result = result [1] x;
Drag options to blanks, or click blank then click option'
A*
B+
C-
D/
Attempts:
3 left
💡 Hint
Common Mistakes
Using '+' instead of '*' causes wrong calculation.
Using '/' or '-' causes runtime errors or wrong results.
2fill in blank
medium

Complete the code to square x in each iteration.

DSA C++
x = x [1] x;
Drag options to blanks, or click blank then click option'
A+
B/
C-
D*
Attempts:
3 left
💡 Hint
Common Mistakes
Using '+' adds x to itself instead of squaring.
Using '-' or '/' leads to incorrect values.
3fill in blank
hard

Fix the error in the loop condition to run while n is greater than zero.

DSA C++
while (n [1] 0) {
Drag options to blanks, or click blank then click option'
A<
B==
C>
D<=
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<' causes the loop to never run if n starts positive.
Using '==' runs only when n is zero, which is incorrect.
4fill in blank
hard

Fill both blanks to correctly halve n and update the loop.

DSA C++
n = n [1] 2;
// Loop continues while n [2] 0
Drag options to blanks, or click blank then click option'
A//
B>
C<
D/
Attempts:
3 left
💡 Hint
Common Mistakes
Using '//' causes a syntax error because '//' starts a comment in C++.
Using '<' in the condition causes the loop to run incorrectly.
5fill in blank
hard

Fill all three blanks to complete the fast exponentiation function.

DSA C++
int fastPower(int x, int n) {
    int result = 1;
    while (n [1] 0) {
        if (n % 2 == 1) result = result [2] x;
        x = x [3] x;
        n = n / 2;
    }
    return result;
}
Drag options to blanks, or click blank then click option'
A>
B*
C+
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using '+' instead of '*' causes wrong multiplication.
Using '-' causes incorrect calculations.

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

  1. Step 1: Understand simple exponentiation time

    Simple repeated multiplication takes n multiplications for power n, so O(n) time.
  2. 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.
  3. Final Answer:

    It reduces the time complexity from O(n) to O(log n) -> Option B
  4. 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

  1. Step 1: Identify base case for exponent zero

    Any number to the power 0 is 1, so if n == 0, return 1.
  2. Step 2: Check other options

    Other options do not correctly represent the base case for power calculation.
  3. Final Answer:

    if (n == 0) return 1; -> Option D
  4. 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

  1. 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.
  2. Step 2: Calculate values bottom-up

    fastPow(2,1) = 1*1*2=2; fastPow(2,2) = 2*2=4; fastPow(2,5) = 4*4*2=32.
  3. Final Answer:

    32 -> Option A
  4. Quick Check:

    2^5 = 32 [OK]
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

  1. Step 1: Check odd power multiplication

    In the odd case, code multiplies by n instead of x, which is incorrect.
  2. Step 2: Confirm correct multiplication

    It should multiply by x to account for the extra factor in odd powers.
  3. Final Answer:

    Multiplying by n instead of x in the odd case -> Option A
  4. 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

  1. Step 1: Check base case and modulo usage

    Base case returns 1 for n=0, correct. Multiplications use modulo to avoid overflow.
  2. 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.
  3. Final Answer:

    code correctly implements fast exponentiation with modulo -> Option C
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard