Euclidean Algorithm
One of the basic techniques of number theory is the Euclidean algorithm, which is a simple procedure for determining the greatest common divisor of two positive integers.First, we need a simple definition: Two integers are relatively prime if their only common positive integer factor is 1.
Greatest Common Divisor
Recall that a nonzero b is defined to be a divisor of a if a=mb for some m, where a,b, and m are integers.We will use the notation gcd(a,b) or (a,b) to mean the greatest common divisor of a and b. The greatest common divisor of a and b is the largest integer that divides both a and b .We also define gcd(0,0)=0.
More formally, the positive integer c is said to be the greatest common divisor of a and b if
1.c is a divisor of a and b .
2. Any divisor of a and b is a divisor of c.
An equivalent definition is the following:
gcd(a,b)=max[k,such that k|a and k|b]
Because we require that the greatest common divisor be positive,gcd(a,b)=gcd(a−b)=gcd(−a,b)=gcd(−a,−b). In general gcd(a,b)=gcd(|a|,|b|)
Example:
gcd(60,24)=gcd(60,−24)=12
Also, because all nonzero integers divide 0, we have gcd(a,0)=|a|.
Two integers a and b are relatively prime if their only common positive integer factor is 1. This is equivalent to saying that a and b are relatively prime if gcd(a,b)=1.
Lets describe the Euclids algorithm for finding the greatest common divisors of two integers.
Suppose we have integers a,b such that d=gcd(a,b). Assume a≥b>0. Now dividing a by b and applying the division algorithm, we can state
a=q1b+r10≤r1<b
If it happens that r1=0, then b|a and d=gcd(a,b)=b. But if r1≠0, we can state that d|r1. This is due to the basic properties of divisibility: the relations d|a and d|b together imply that d|(a−q1b), which is the same as d|r1. Before proceeding with the Euclidian algorithm, we need to answer the question:What is the gcd(b,r1)? We know that d|b and d|r1 . Now take any arbitrary integer c that divides both b and r1 . Therefore, c|(q1b+r1)=a . Because c divides both a and b , we must have c≤d , which is the greatest common divisor of a and b.Therefore d=gcd(b,r1).
Lets now assume that r1≠0. Because b>r1, we can divide b by r1and apply the division algorithm to obtain:
Time Complexity: O(log(min(a, b))) since the algorithm reduces the values quickly by taking the modulus.
b=q2r1+r20≤r2<r1
We can define the Euclidean algorithm concisely as the following recursive function.( where % is the mod operator)
Euclid(a,b)
if (b=0) then
return a;
else
return Euclid(b, a % b);
Example:
gcd(55, 22) = gcd(22, 55 mod 22) = gcd(22, 11) = 11
gcd(18, 12) = gcd(12, 6) = gcd(6, 0) = 6
gcd(11, 10) = gcd(10, 1) = gcd(1, 0) = 1
Time Complexity: O(log(min(a, b))) since the algorithm reduces the values quickly by taking the modulus.
Python Code:
def euclidean_gcd(a, b):
while b != 0:
a, b = b, a % b
return a
# Example usage:
a = 48
b = 18
gcd = euclidean_gcd(a, b)
print("GCD of", a, "and", b, "is:", gcd)
We can also use built in function gcd() from math module
Example:
import math
print(math.gcd(10,100))
Comments
Post a Comment