Transcript Document
Application:
Algorithms
Lecture 20
Section 3.8
Wed, Feb 21, 2007
Greatest Common Divisors
Let a and b be integers that are not both 0.
The greatest common divisor of a and b,
denoted gcd(a, b), is the unique positive
integer d with the following properties:
d | a and d | b.
For every integer c, if c | a and c | b, then
c | d.
Least Common Multiples
Let a and b be nonzero integers.
The least common multiple of a and b,
denoted lcm(a, b), is the unique positive
integer m with the following properties:
a | m and b | m.
For every integer c, if a | c and b | c, then
m | c.
The High-school gcd
Algorithm
The high-school method is very inefficient.
Factor each number into standard form.
For each prime that appears in both
factorizations, use it as a factor of the gcd
along with the smaller of the two
exponents.
Example
Find the gcd of 81900 and 54810.
We factor them as
81900 = 22 32 52 71 131 290
54810 = 21 33 51 71 130 291
Therefore, the gcd is
2 32 5 7 = 630
The Euclidean Algorithm
Factoring is inefficient; therefore, this
algorithm is inefficient.
The run time of this algorithm is O(10d),
where d is the number of digits in the
number.
Euclid had a much better idea.
The run time of the Euclidean Algorithm is
O(d), where d is the number of digits in the
number.
The Euclidean Algorithm
Input: A, B (positive integers, not both 0)
The Euclidean Algorithm
Algorithm body:
Output: b
a := A
b := B
if b = 0 then
swap a and b
r := a mod b
while r > 0
a := b
b := r
r := a mod b
end while
Example
Apply the Euclidean Algorithm to A = 81900
and B = 54810.
Iteration
A
B
a
b
r
0
81900
54810
81900
54810
27090
1
2
Example
Apply the Euclidean Algorithm to A = 81900
and B = 54810.
Iteration
A
B
a
b
r
0
81900
54810
81900
54810
27090
54810
27090
630
1
2
Example
Apply the Euclidean Algorithm to A = 81900
and B = 54810.
Iteration
A
B
a
b
r
0
81900
54810
81900
54810
27090
1
54810
27090
630
2
27090
630
0
Example
Find the gcd of 1098011 and 1033133.
Least Common Multiples
What is the efficient way to find lcm’s?
What is the lcm of 1098011 and 1033133?
Proof of the Euclidean
Algorithm
Theorem: The Euclidean Algorithm
terminates for all legitimate inputs A and B.
Proof:
We may assume that B > 0.
After the first iteration of the while loop,
0b<B
since b is the remainder of A divided by B.
Proof of the Euclidean
Algorithm
Each iteration produces a nonnegative
remainder that is smaller than the previous
remainder.
This cannot happen more than B times
before the remainder is 0.
Proof of the Euclidean
Algorithm
Lemma 1: If b > 0, then gcd(b, 0) = b.
Proof:
b | b and b | 0.
For all integers c, if c | 0 and c | b, then
c | b.
Therefore, b = gcd(b, 0).
Proof of the Euclidean
Algorithm
Lemma 2: If a and b are integers, with b
0, and q and r are integers such that
a = qb + r
then gcd(a, b) = gcd(b, r).
Proof:
Let d = gcd(b, r).
Then d | b and d | r and any integer that
divides b and r must also divide d.
Proof of the Euclidean
Algorithm
We must show that d | a and d | b and any
integer that divides a and b must also
divide d.
We already know that d | b.
Since a = qb + r, it follows that d | a.
Let c be an integer such that c | a and c | b.
Since r = a – qb, it follows that c | r and so
c | d.
Therefore, d = gcd(a, b).
Proof of the Euclidean
Algorithm
Theorem: The Euclidean Algorithm
produces the gcd of A and B.
Proof:
After the final iteration of the while loop,
r = 0.
By Lemma 1, the output b is the gcd of b
and r, i.e., b = gcd(b, 0).
By Lemma 2, that is equal to the gcd of “a”
and “b” in the final iteration.
Proof of the Euclidean
Algorithm
But “a” and “b” on the last iteration were “b”
and “r” on the previous iteration.
Therefore, gcd(a, b) on the last iteration
equals gcd(b, r) on the previous iteration,
which equals gcd(a, b) on the previous
iteration, and so on.
Following this argument all the back to the
first iteration, we see that the output is
gcd(A, B).
Proof of the Euclidean
Algorithm
In the next chapter, we will study
mathematical induction.
At that point, we will be able to make this
argument more rigorous.