Bird
Raised Fist0
DSA Cprogramming~5 mins

GCD and LCM Euclidean Algorithm in DSA C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does GCD stand for and what does it represent?
GCD stands for Greatest Common Divisor. It is the largest number that divides two or more numbers without leaving a remainder.
Click to reveal answer
beginner
What is the Euclidean Algorithm used for?
The Euclidean Algorithm is a method to find the GCD of two numbers by repeatedly subtracting the smaller number from the larger one or using the remainder operation until the remainder is zero.
Click to reveal answer
intermediate
How is LCM related to GCD?
LCM (Least Common Multiple) and GCD are related by the formula: LCM(a, b) = (a * b) / GCD(a, b). This means the product of two numbers equals the product of their GCD and LCM.
Click to reveal answer
beginner
What is the base case in the Euclidean Algorithm for GCD?
The base case occurs when the second number becomes zero. At this point, the first number is the GCD.
Click to reveal answer
intermediate
Why is the Euclidean Algorithm efficient compared to checking all divisors?
Because it uses division and remainder operations to reduce the problem size quickly, avoiding checking every possible divisor, which saves time especially for large numbers.
Click to reveal answer
What is the GCD of 48 and 18 using the Euclidean Algorithm?
A12
B24
C18
D6
Which operation is repeatedly used in the Euclidean Algorithm?
AModulo (remainder)
BSubtraction
CAddition
DMultiplication
If GCD(15, 20) = 5, what is LCM(15, 20)?
A75
B60
C100
D300
When does the Euclidean Algorithm stop?
AWhen both numbers are equal
BWhen the smaller number is zero
CWhen the remainder is zero
DWhen the larger number is zero
Which of these pairs has a GCD of 1?
A8 and 15
B20 and 30
C12 and 18
D14 and 21
Explain how the Euclidean Algorithm finds the GCD of two numbers step-by-step.
Think about dividing and taking remainders repeatedly.
You got /3 concepts.
    Describe the relationship between GCD and LCM and how to calculate one if you know the other.
    Remember the multiplication connection between GCD and LCM.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the Euclidean algorithm primarily calculate between two numbers a and b?
      easy
      A. The difference between the two numbers
      B. The Least Common Multiple (LCM)
      C. The Greatest Common Divisor (GCD)
      D. The sum of the two numbers

      Solution

      1. Step 1: Understand the Euclidean algorithm purpose

        The Euclidean algorithm is a method to find the greatest common divisor (GCD) of two integers by repeatedly applying the remainder operation.
      2. Step 2: Differentiate GCD from LCM

        While GCD finds the largest number dividing both, LCM finds the smallest number divisible by both. Euclidean algorithm is for GCD.
      3. Final Answer:

        The Greatest Common Divisor (GCD) -> Option C
      4. Quick Check:

        Euclidean algorithm = GCD [OK]
      Hint: Euclidean algorithm always finds GCD, not LCM [OK]
      Common Mistakes:
      • Confusing GCD with LCM
      • Thinking it calculates sum or difference
      • Assuming it finds prime factors directly
      2. Which of the following is the correct syntax for the Euclidean algorithm function header in C to find GCD of two integers a and b?
      easy
      A. int gcd(int a, int b);
      B. void gcd(int a, int b);
      C. float gcd(int a, int b);
      D. int gcd(float a, float b);

      Solution

      1. Step 1: Identify return type for GCD function

        GCD is an integer value, so the function should return int.
      2. Step 2: Check parameter types

        Parameters a and b should be integers for GCD calculation.
      3. Final Answer:

        int gcd(int a, int b); -> Option A
      4. Quick Check:

        Function returns int and takes int parameters [OK]
      Hint: GCD function returns int and takes int parameters [OK]
      Common Mistakes:
      • Using void return type for GCD
      • Using float parameters or return type
      • Missing parameter types
      3. What is the output of the following C code snippet?
      int gcd(int a, int b) {
          if (b == 0) return a;
          return gcd(b, a % b);
      }
      
      int main() {
          printf("%d", gcd(48, 18));
          return 0;
      }
      medium
      A. 12
      B. 6
      C. 18
      D. 3

      Solution

      1. Step 1: Apply Euclidean algorithm steps for gcd(48, 18)

        Calculate gcd(48,18): 48 % 18 = 12, so gcd(18,12). Then 18 % 12 = 6, gcd(12,6). Then 12 % 6 = 0, gcd(6,0) = 6.
      2. Step 2: Return the last non-zero remainder

        When second parameter is 0, return first parameter which is 6.
      3. Final Answer:

        6 -> Option B
      4. Quick Check:

        GCD(48,18) = 6 [OK]
      Hint: Use remainder until zero to find GCD [OK]
      Common Mistakes:
      • Returning wrong remainder
      • Confusing order of parameters
      • Stopping before remainder is zero
      4. Identify the error in the following C function to compute LCM using GCD:
      int gcd(int a, int b) {
          while (b != 0) {
              int temp = b;
              b = a % b;
              a = temp;
          }
          return a;
      }
      
      int lcm(int a, int b) {
          return a * b / gcd(a, b);
      }
      medium
      A. No error, code is correct
      B. GCD function has infinite loop
      C. LCM function should use addition instead of multiplication
      D. LCM function may cause integer overflow

      Solution

      1. Step 1: Analyze GCD function correctness

        The GCD function uses Euclidean algorithm correctly with a loop and swapping variables.
      2. Step 2: Check LCM calculation for potential issues

        LCM is calculated as (a * b) / gcd(a, b). Multiplying a and b first can cause integer overflow if numbers are large.
      3. Final Answer:

        LCM function may cause integer overflow -> Option D
      4. Quick Check:

        Multiplying before dividing risks overflow [OK]
      Hint: Multiply after dividing by GCD to avoid overflow [OK]
      Common Mistakes:
      • Assuming no overflow risk
      • Thinking GCD function loops infinitely
      • Using addition instead of multiplication in LCM
      5. Given an array of positive integers arr = {12, 15, 20}, which of the following C code snippets correctly computes the LCM of all elements using the Euclidean algorithm?
      hard
      A.
      int gcd(int a, int b) {
          if (b == 0) return a;
          return gcd(b, a % b);
      }
      
      int lcm(int a, int b) {
          return (a / gcd(a, b)) * b;
      }
      
      int main() {
          int arr[] = {12, 15, 20};
          int result = arr[0];
          for (int i = 1; i < 3; i++) {
              result = lcm(result, arr[i]);
          }
          printf("%d", result);
          return 0;
      }
      B.
      int gcd(int a, int b) {
          while (b != 0) {
              int temp = b;
              b = a % b;
              a = temp;
          }
          return a;
      }
      
      int lcm(int a, int b) {
          return a * b / gcd(a, b);
      }
      
      int main() {
          int arr[] = {12, 15, 20};
          int result = 1;
          for (int i = 0; i < 3; i++) {
              result = lcm(result, arr[i]);
          }
          printf("%d", result);
          return 0;
      }
      C.
      int gcd(int a, int b) {
          if (b == 0) return a;
          return gcd(b, a % b);
      }
      
      int lcm(int a, int b) {
          return a + b - gcd(a, b);
      }
      
      int main() {
          int arr[] = {12, 15, 20};
          int result = arr[0];
          for (int i = 1; i < 3; i++) {
              result = lcm(result, arr[i]);
          }
          printf("%d", result);
          return 0;
      }
      D.
      int gcd(int a, int b) {
          if (b == 0) return a;
          return gcd(b, a % b);
      }
      
      int lcm(int a, int b) {
          return (a * b) / gcd(a, b);
      }
      
      int main() {
          int arr[] = {12, 15, 20};
          int result = arr[0];
          for (int i = 1; i < 3; i++) {
              result = lcm(result, arr[i]);
          }
          printf("%d", result);
          return 0;
      }

      Solution

      1. Step 1: Understand LCM calculation in options

        int gcd(int a, int b) {
            if (b == 0) return a;
            return gcd(b, a % b);
        }
        
        int lcm(int a, int b) {
            return (a / gcd(a, b)) * b;
        }
        
        int main() {
            int arr[] = {12, 15, 20};
            int result = arr[0];
            for (int i = 1; i < 3; i++) {
                result = lcm(result, arr[i]);
            }
            printf("%d", result);
            return 0;
        }
        uses lcm(a,b) = (a / gcd(a,b)) * b which avoids overflow and is correct.
        int gcd(int a, int b) {
            while (b != 0) {
                int temp = b;
                b = a % b;
                a = temp;
            }
            return a;
        }
        
        int lcm(int a, int b) {
            return a * b / gcd(a, b);
        }
        
        int main() {
            int arr[] = {12, 15, 20};
            int result = 1;
            for (int i = 0; i < 3; i++) {
                result = lcm(result, arr[i]);
            }
            printf("%d", result);
            return 0;
        }
        starts with result=1 which is valid but risks overflow.
        int gcd(int a, int b) {
            if (b == 0) return a;
            return gcd(b, a % b);
        }
        
        int lcm(int a, int b) {
            return a + b - gcd(a, b);
        }
        
        int main() {
            int arr[] = {12, 15, 20};
            int result = arr[0];
            for (int i = 1; i < 3; i++) {
                result = lcm(result, arr[i]);
            }
            printf("%d", result);
            return 0;
        }
        uses incorrect formula (addition).
        int gcd(int a, int b) {
            if (b == 0) return a;
            return gcd(b, a % b);
        }
        
        int lcm(int a, int b) {
            return (a * b) / gcd(a, b);
        }
        
        int main() {
            int arr[] = {12, 15, 20};
            int result = arr[0];
            for (int i = 1; i < 3; i++) {
                result = lcm(result, arr[i]);
            }
            printf("%d", result);
            return 0;
        }
        uses multiplication first risking overflow.
      2. Step 2: Check iteration and initialization

        int gcd(int a, int b) {
            if (b == 0) return a;
            return gcd(b, a % b);
        }
        
        int lcm(int a, int b) {
            return (a / gcd(a, b)) * b;
        }
        
        int main() {
            int arr[] = {12, 15, 20};
            int result = arr[0];
            for (int i = 1; i < 3; i++) {
                result = lcm(result, arr[i]);
            }
            printf("%d", result);
            return 0;
        }
        initializes result with first element and iterates from second element, correctly accumulating LCM. This is the safest and correct approach.
      3. Final Answer:

        Option A code snippet correctly computes LCM of all elements -> Option A
      4. Quick Check:

        LCM = (a / GCD) * b and accumulate [OK]
      Hint: Use (a / gcd) * b to avoid overflow when computing LCM [OK]
      Common Mistakes:
      • Using addition instead of multiplication for LCM
      • Starting with result=1 causing overflow
      • Multiplying before dividing causing overflow
      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