| 
									
										
										
										
											2018-10-12 15:37:13 -04:00
										 |  |  | --- | 
					
						
							|  |  |  | title: Greatest Common Divisor Euclidean | 
					
						
							|  |  |  | --- | 
					
						
							|  |  |  | ## Greatest Common Divisor Euclidean
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For this topic you must know about Greatest Common Divisor (GCD) and the MOD operation first. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Greatest Common Divisor (GCD)
 | 
					
						
							|  |  |  | The GCD of two or more integers is the largest integer that divides each of the integers such that their remainder is zero. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Example-   | 
					
						
							|  |  |  | GCD of 20, 30 = 10 *(10 is the largest number which divides 20 and 30 with remainder as 0)*   | 
					
						
							|  |  |  | GCD of 42, 120, 285 = 3 *(3 is the largest number which divides 42, 120 and 285 with remainder as 0)*   | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### "mod" Operation
 | 
					
						
							|  |  |  | The mod operation gives you the remainder when two positive integers are divided. | 
					
						
							|  |  |  | We write it as follows-   | 
					
						
							|  |  |  | `A mod B = R` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This means, dividing A by B gives you the remainder R, this is different than your division operation which gives you the quotient. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Example-   | 
					
						
							|  |  |  | 7 mod 2 = 1 *(Dividing 7 by 2 gives the remainder 1)*   | 
					
						
							|  |  |  | 42 mod 7 = 0 *(Dividing 42 by 7 gives the remainder 0)*   | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | With the above two concepts understood you will easily understand the Euclidean Algorithm. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Euclidean Algorithm for Greatest Common Divisor (GCD)
 | 
					
						
							|  |  |  | The Euclidean Algorithm finds the GCD of 2 numbers. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You will better understand this Algorithm by seeing it in action. | 
					
						
							|  |  |  | Assuming you want to calculate the GCD of  1220 and 516, lets apply the Euclidean Algorithm-   | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Assuming you want to calculate the GCD of  1220 and 516, lets apply the Euclidean Algorithm- | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Pseudo Code of the Algorithm-   | 
					
						
							|  |  |  | Step 1: **Let `a, b` be the two numbers**   | 
					
						
							|  |  |  | Step 2: **`a mod b = R`**   | 
					
						
							|  |  |  | Step 3: **Let `a = b` and `b = R`**   | 
					
						
							|  |  |  | Step 4: **Repeat Steps 2 and 3 until `a mod b` is greater than 0**   | 
					
						
							|  |  |  | Step 5: **GCD = b**   | 
					
						
							|  |  |  | Step 6: Finish   | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-28 09:35:41 +01:00
										 |  |  | JavaScript Code to Perform GCD- | 
					
						
							| 
									
										
										
										
											2018-10-12 15:37:13 -04:00
										 |  |  | ```javascript | 
					
						
							|  |  |  | function gcd(a, b) { | 
					
						
							|  |  |  |   var R; | 
					
						
							|  |  |  |   while ((a % b) > 0)  { | 
					
						
							|  |  |  |     R = a % b; | 
					
						
							|  |  |  |     a = b; | 
					
						
							|  |  |  |     b = R; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return b; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-28 09:35:41 +01:00
										 |  |  | JavaScript Code to Perform GCD using Recursion- | 
					
						
							| 
									
										
										
										
											2018-10-12 15:37:13 -04:00
										 |  |  | ```javascript | 
					
						
							|  |  |  | function gcd(a, b) { | 
					
						
							|  |  |  |   if (b == 0) | 
					
						
							|  |  |  |     return a; | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     return gcd(b, (a % b)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-14 05:10:56 +05:30
										 |  |  | C code to perform GCD using recursion | 
					
						
							|  |  |  | ```c | 
					
						
							|  |  |  | int gcd(int a, int b)  | 
					
						
							|  |  |  | {  | 
					
						
							|  |  |  |     // Everything divides 0   | 
					
						
							|  |  |  |     if (a == 0)  | 
					
						
							|  |  |  |        return b;  | 
					
						
							|  |  |  |     if (b == 0)  | 
					
						
							|  |  |  |        return a;  | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |     // base case  | 
					
						
							|  |  |  |     if (a == b)  | 
					
						
							|  |  |  |         return a;  | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |     // a is greater  | 
					
						
							|  |  |  |     if (a > b)  | 
					
						
							|  |  |  |         return gcd(a-b, b);  | 
					
						
							|  |  |  |     return gcd(a, b-a);  | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-14 04:33:42 +05:30
										 |  |  | C++ Code to Perform GCD- | 
					
						
							|  |  |  | ```csharp | 
					
						
							|  |  |  | int gcd(int a,int b) { | 
					
						
							|  |  |  |   int R; | 
					
						
							|  |  |  |   while ((a % b) > 0)  { | 
					
						
							|  |  |  |     R = a % b; | 
					
						
							|  |  |  |     a = b; | 
					
						
							|  |  |  |     b = R; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return b; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-14 04:11:55 +05:30
										 |  |  | Python Code to Perform GCD using Recursion | 
					
						
							|  |  |  | ```Python | 
					
						
							|  |  |  | def gcd(a, b): | 
					
						
							|  |  |  |   if b == 0: | 
					
						
							|  |  |  |     return a: | 
					
						
							|  |  |  |   else: | 
					
						
							|  |  |  |     return gcd(b, (a % b)) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Java Code to Perform GCD using Recursion | 
					
						
							|  |  |  | ```Java | 
					
						
							|  |  |  | static int gcd(int a, int b) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   if(b == 0) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     return a; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return gcd(b, a % b); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-12 15:37:13 -04:00
										 |  |  | You can also use the Euclidean Algorithm to find GCD of more than two numbers. | 
					
						
							|  |  |  | Since, GCD is associative, the following operation is valid- `GCD(a,b,c) == GCD(GCD(a,b), c)` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Calculate the GCD of the first two numbers, then find GCD of the result and the next number. | 
					
						
							|  |  |  | Example- `GCD(203,91,77) == GCD(GCD(203,91),77) == GCD(7, 77) == 7` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can find GCD of `n` numbers in the same way. | 
					
						
							| 
									
										
										
										
											2019-02-14 03:04:52 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | ### Extended Euclidean algorithm
 | 
					
						
							|  |  |  | This is an extension of Euclidean algorithm. It also calculates the coefficients x, y such that  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ax+by = gcd(a,b) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x and y are also known as coefficients of Bézout's identity. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | c code for Extended Euclidean algorithm | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```c | 
					
						
							|  |  |  | struct Triplet{ | 
					
						
							|  |  |  | 	int gcd; | 
					
						
							|  |  |  | 	int x; | 
					
						
							|  |  |  | 	int y; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | Triplet gcdExtendedEuclid(int a,int b){ | 
					
						
							|  |  |  | 	//Base Case | 
					
						
							|  |  |  | 	if(b==0){ | 
					
						
							|  |  |  | 		Triplet myAns; | 
					
						
							|  |  |  | 		myAns.gcd = a; | 
					
						
							|  |  |  | 		myAns.x = 1; | 
					
						
							|  |  |  | 		myAns.y = 0; | 
					
						
							|  |  |  | 		return myAns; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	Triplet smallAns = gcdExtendedEuclid(b,a%b); | 
					
						
							|  |  |  | 	//Extended euclid says | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Triplet myAns; | 
					
						
							|  |  |  | 	myAns.gcd = smallAns.gcd; | 
					
						
							|  |  |  | 	myAns.x  = smallAns.y; | 
					
						
							|  |  |  | 	myAns.y = (smallAns.x - ((a/b)*(smallAns.y))); | 
					
						
							|  |  |  | 	return myAns;	 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |