Algorithm GCD
Algorithm GCD
B
n 654321 b 654321 123456 37041 12333 42 27 15 12 3
C 1 2 3 4 5 6 7 8 9 10 11 12 13 14
m
A
n
123456 654321
=A2 =B4 =B5 =B6 =B7 =B8 =B9 =B10 =B11 =B12 =B13
=B2 =C4 =C5 =C6 =C7 =C8 =C9 =C10 =C11 =C12 =C13
=MOD(A4,B4) =MOD(A5,B5) =MOD(A6,B6) =MOD(A7,B7) =MOD(A8,B8) =MOD(A9,B9) =MOD(A10,B10) =MOD(A11,B11) =MOD(A12,B12) =MOD(A13,B13) =MOD(A14,B14)
0 #DIV/0! #DIV/0!
Once row 5 is entered, it is copied to all lower rows. The spreadsheet automatically updates the formulas (that is what spreadsheets do!). A new pair of numbers can be entered in A2 and B2. Note that when a zero remainder occurs, the spreadsheet gives an error message on the following line.
We can produce a more economical version of this by using only one column: the column of remainders.
12345 54321 =MOD(A2,A3) =MOD(A3,A4) =MOD(A4,A5) =MOD(A5,A6) =MOD(A6,A7) =MOD(A7,A8) =MOD(A8,A9) =MOD(A9,A10)
m n
The formula is entered in the 3rd row and copied to the rows below.
A 1 2 3 4 5 6 7
m 12345 A 1 0 =A5-E6*A6 0 1 54321
B
n
B =A3 =B3
rem
=B5-E6*B6
=C5-E6*C6
Now copy and paste row 7 as many times as you wish to rows 8, 9, . Notice that the formulas adjust themselves.
A 1 2 3 4 5 6 7 8 9 10 11 12 13
m 12345 A 1 0 1 -4 9 -22 3617 -18107
B
n 54321 B 0 1 0 1 -2 5 -822 4115
E
Notice that the last non-zero remainder (Column C) is 3. So gcd(m,n)=3. One can prove that Ak*m + Bk*n = Ck In this case the numbers on line 12 show give the result 3 = (3617)m + (-822)n
In the spreadsheet we have retained all the A, B, r and q that arise in the calculation. When writing a computer program to perform this calculation we note that each row depends only on the two previous rows. We do not have to store all the A, B, r -- just the most recent two values of each. This makes the program a bit harder to understand than the spreadsheet. We will use variables A0, B0, and r0 to represent the previous values, A1, B1 and r1 to represent the current values, and q to represent the current quotient. Program: Extended Greatest Common Divisor (EGCD) Input: positive integers m,n Output: integers A, B ,g so that g=gcd(m,n) and Am+Bn=g Initialization: A0:=1, B0:=0; r0:=m A1:=0, B1:=1; r1:=n
While r1 <> 0 do
q:=quot(r0,r1) temp := A0-A1*q, A0:=A1, A1:=temp; temp := B0-B1*q, B0:=B1, B1:=temp; temp := r0-r1*q, r0:=r1, r1:=temp; Return A:=A0, B:=B0, g:=r0