(Translated by https://www.hiragana.jp/)
Euclidean algorithms (Basic and Extended) - GeeksforGeeks
Open In App

Euclidean algorithms (Basic and Extended)

Last Updated : 17 Feb, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

The Euclidean algorithm is a way to find the greatest common divisor of two positive integers. GCD of two numbers is the largest number that divides both of them. A simple way to find GCD is to factorize both numbers and multiply common prime factors.

Examples:

input: a = 12, b = 20
Output: 4
Explanation: The Common factors of (12, 20) are 1, 2, and 4 and greatest is 4.

input: a = 18, b = 33
Output: 3
Explanation: The Common factors of (18, 33) are 1 and 3 and greatest is 3.

GCD

Basic Euclidean Algorithm for GCD

The algorithm is based on the below facts. 

  • If we subtract a smaller number from a larger one (we reduce a larger number), GCD doesn't change. So if we keep subtracting repeatedly the larger of two, we end up with GCD.
  • Now instead of subtraction, if we divide the larger number, the algorithm stops when we find the remainder 0.
CPP
C Java Python C# JavaScript

Output
GCD(10, 15) = 5
GCD(35, 10) = 5
GCD(31, 2) = 1

Time Complexity: O(log min(a, b))
Auxiliary Space: O(log (min(a,b)))

Extended Euclidean Algorithm

 Extended Euclidean algorithm also finds integer coefficients x and y such that: ax + by = gcd(a, b) 

Examples:  

Input: a = 30, b = 20
Output: gcd = 10, x = 1, y = -1
Explanation: 30*1 + 20*(-1) = 10

Input: a = 35, b = 15
Output: gcd = 5, x = 1, y = -2
Explanation: 35*1 + 15*(-2) = 5

The extended Euclidean algorithm updates the results of gcd(a, b) using the results calculated by the recursive call gcd(b%a, a). Let values of x and y calculated by the recursive call be x1 and y1. x and y are updated using the below expressions. 

ax + by = gcd(a, b)
gcd(a, b) = gcd(b%a, a)
gcd(b%a, a) = (b%a)x1 + ay1
ax + by = (b%a)x1 + ay1
ax + by = (b - [b/a] * a)x1 + ay1
ax + by = a(y1 - [b/a] * x1) + bx1

Comparing LHS and RHS,
x = y1 - [Tex]\lfloor b/a \rfloor[/Tex]* x1
 y = x1

C++
C Java Python C# JavaScript

Output
5

Time Complexity: O(log min(a, b))
Auxiliary Space: O(log (min(a,b)))

How does Extended Algorithm Work? 

As seen above, x and y are results for inputs a and b,

a.x + b.y = gcd                      ----(1)  

And x1 and y1 are results for inputs b%a and a

(b%a).x1 + a.y1 = gcd   

When we put b%a = [Tex](b - (\lfloor b/a \rfloor).a)[/Tex] in above, 
we get following. Note that [Tex]\lfloor b/a\rfloor[/Tex] is floor(b/a)

[Tex](b - (\lfloor b/a \rfloor).a).x1 + a.y1  = gcd[/Tex]

Above equation can also be written as below

[Tex]b.x1 + a.(y1 - (\lfloor b/a \rfloor).x1) = gcd [/Tex]     ---(2)

After comparing coefficients of 'a' and 'b' in (1) and 
(2), we get following, 
[Tex]x = y1 - \lfloor b/a \rfloor * x1[/Tex]
y = x1

How is Extended Algorithm Useful? 

The extended Euclidean algorithm is particularly useful when a and b are coprime (or gcd is 1). Since x is the modular multiplicative inverse of "a modulo b", and y is the modular multiplicative inverse of "b modulo a". In particular, the computation of the modular multiplicative inverse is an essential step in RSA public-key encryption method.



Next Article
Article Tags :
Practice Tags :

Similar Reads