Content deleted Content added
Cite |
No edit summary |
||
(23 intermediate revisions by 18 users not shown) | |||
Line 1:
{{short description|Fast greatest common divisor algorithm}}
'''Lehmer's GCD algorithm''', named after [[Derrick Henry Lehmer]], is a
== Algorithm ==
Lehmer noted
Say we want to obtain the GCD of the two integers ''a'' and ''b''. Let ''a''
* If ''b'' contains only one digit (in the chosen [[radix|base]], say
* If ''a'' and ''b'' differ in the length of digits, perform a division so that ''a'' and ''b'' are equal in length, with length equal to ''m''.
* ''Outer loop:'' Iterate until one of ''a'' or ''b'' is zero:
** Decrease ''m'' by one. Let ''x'' be the leading (most significant) digit in ''a'',
** Initialize a 2 by 3 [[matrix (mathematics)|matrix]]
*::<math>\textstyle \begin{bmatrix} A & B & x\\ C & D & y \end{bmatrix} </math> to an extended [[identity matrix]] <math>\textstyle \begin{bmatrix} 1 & 0 & x \\ 0 & 1 & y\end{bmatrix}, </math> *:and perform the euclidean algorithm simultaneously on the pairs *
*** If ''w''<sub>1</sub> ≠ ''w''<sub>2</sub>, then break out of the inner iteration. Else set ''w'' to ''w''<sub>1</sub> (or ''w''<sub>2</sub>).
***
**: with the matrix product
**:: <math>\textstyle
\begin{bmatrix} 0 & 1 \\ 1 & -w \end{bmatrix}
*** If ''B'' = 0, we have reached a ''deadlock''; perform a normal step of the euclidean algorithm with ''a'' and ''b'', and recompute the matrix. ▼
\cdot
** Set ''a'' to ''aA'' + ''bB'' and ''b'' to ''Ca'' + ''Db'' (again simultaneously). This applies the steps of the euclidean algorithm that were performed on the leading digits in compressed form to the long integers ''a'' and ''b''. Restart the outer iteration.▼
\begin{bmatrix} A & B & x \\ C & D & y \end{bmatrix}
= \begin{bmatrix} C & D &y \\ A - wC & B - wD & x-wy \end{bmatrix}
</math>
**:according to the matrix formulation of the extended euclidean algorithm.
***If ''B'' ≠ 0, go to the start of the inner loop.
▲
▲** Set ''a'' to ''aA'' + ''bB'' and ''b'' to ''Ca'' + ''Db'' (again simultaneously). This applies the steps of the euclidean algorithm that were performed on the leading digits in compressed form to the long integers ''a'' and ''b''.
==References==
<references/>
* [[Kapil Hari Paranjape|Kapil Paranjape]], [http://www.imsc.res.in/~kapil/crypto/notes/node11.html Lehmer's Algorithm]▼
▲* Kapil Paranjape, [http://www.imsc.res.in/~kapil/crypto/notes/node11.html Lehmer's Algorithm]
{{Number-theoretic algorithms}}
{{DEFAULTSORT:Lehmer's Gcd Algorithm}}
[[Category:Number theoretic algorithms]]
|