**Rozšírený Euklidov algoritmus** je algoritmus, ktorým je možné nájsť Bézoutovú rovnosť, čiže vyjadriť najväčší spoločný deliteľ (NSD) dvoch kladných celých čísel ich lineárnou kombináciou.

Príklad
-------

Nech sú dané dve kladné celé čísla *m* a *n* a nech *d* je ich najväčší spoločný deliteľ, t.j. *d = NSD(m,n)*. Pomocou Euklidovho algoritmu je možné zistiť, že *NSD(196,34) = 2*:

| i | ci | di | pi | zi |
| --- | --- | --- | --- | --- |
| 0 | 196 | 34 | 5 | 26 |
| 1 | 34 | 26 | 1 | 8 |
| 2 | 26 | 8 | 3 | 2 |
| 3 | 8 | 2 | 4 | 0 |

kde {\displaystyle i} je iterácia, {\displaystyle c\_{0}=m=196}, {\displaystyle d\_{0}=n=34}, {\displaystyle p\_{i}} je celočíselný podiel {\displaystyle c\_{i}/d\_{i}}, {\displaystyle z\_{i}} je zvyšok po delení {\displaystyle c\_{i}/d\_{i}}, čiže platí {\displaystyle c\_{i}=d\_{i}p\_{i}+z\_{i}},
resp:

{\displaystyle z\_{i}=c\_{i}-d\_{i}p\_{i}\qquad (1)}
a pre každé {\displaystyle i=1,2,3,...} je

{\displaystyle {\begin{array}{lcll}c\_{i}&=&d\_{i-1}&\qquad (2)\\d\_{i}&=&z\_{i-1}&\qquad (3)\end{array}}}
Úlohou Rozšíreného Euklidovho algoritmu je nájsť dvojicu celých čísel {\displaystyle a} a {\displaystyle b}, spĺňajúcu rovnosť {\displaystyle 2=196a+34b}.

Nájdenie Bézoutovej rovnosti spätným dosadzovaním
-------------------------------------------------

V uvedenom príklade platí:

{\displaystyle {\begin{array}{lcll}2&=&26-8\cdot 3&\qquad (4)\\8&=&34-26\cdot 1&\qquad (5)\\26&=&196-34\cdot 5&\qquad (6)\end{array}}}
Dosadením ľavej strany rovnosti (5) do rovnosti (4) dostaneme:

{\displaystyle 2=34\cdot (-3)+26\cdot 4\qquad (7)}
a dosadením ľavej strany rovnosti (6) do rovnosti (7) dostaneme výsledok:

{\displaystyle 2=196\cdot 4+34\cdot (-23)\qquad (8)}
t.j. jednu z možností, ako vyjadriť najväčší spoločný deliteľ dvoch čísel ich lineárnou kombináciou.

### Odvodenie

Nech {\displaystyle k} je iterácia v Euklidovom algoritme, v ktorej bol nájdený najväčší spoločný deliteľ dvoch kladných celých čísel {\displaystyle d=NSD(m,n)=d\_{k}}, čiže pre ktoré platí {\displaystyle z\_{k}=0}.
Spätným dosadením vyjadríme najväčší spoločný deliteľ {\displaystyle d} ako lineárnu kombináciu {\displaystyle c\_{i}} a {\displaystyle d\_{i}} postupne pre každé {\displaystyle i=k,k-1,...0}, t.j:

{\displaystyle d=c\_{i}u\_{i}+d\_{i}v\_{i}\qquad (9)}
Dosadením (2) a (3) do (9) dostaneme:

{\displaystyle d=d\_{i-1}u\_{i}+z\_{i-1}v\_{i}\qquad (10)}
a dosadením (1) do (10):

{\displaystyle {\begin{alignedat}{2}d&=d\_{i-1}u\_{i}+(c\_{i-1}-d\_{i-1}p\_{i-1})v\_{i}\\&=c\_{i-1}v\_{i}+d\_{i-1}(u\_{i}-p\_{i-1}v\_{i})\qquad (11)\end{alignedat}}}
Porovnaním (11) a (9) dostávame výsledok:

{\displaystyle {\begin{array}{lcll}u\_{i-1}&=&v\_{i}&\qquad (12)\\v\_{i-1}&=&u\_{i}-p\_{i-1}v\_{i}&\qquad (13)\end{array}}}
Tiež platí:

{\displaystyle d=d\_{k}=c\_{k}\cdot 0+d\_{k}\cdot 1}
preto:

{\displaystyle {\begin{array}{lcll}u\_{k}&=&0&\qquad (14)\\v\_{k}&=&1&\qquad (15)\end{array}}}
### Formálny zápis

**1.** [Inicializácia premenných.] Priraďte *i ← k, u ← 0, v ← 1*.

**2.** [Ukončovacia podmienka.] Ak *i = 0* tak koniec, pričom *NSD(m,n) = m·u + n·v*

**3.** [Výpočet *u* a *v*.] Priraďte *u\_new ← v, v\_new ← u - p[i-1]·v*.

**4.** [Ďalšia iterácia.] Priraďte *i ← i-1, u ← u\_new, v ← v\_new*. Vráťte sa do bodu 2.

*Poznámka:* Výpočet prebieha opačným smerom než výpočet NSD a okrem naposledy vypočítanej dvojice hodnôt {\displaystyle u\_{i}} a {\displaystyle v\_{i}} je potrebné mať k dispozícii aj všetky hodnoty {\displaystyle p\_{i}}.

### Použitie na konkrétnom príklade

| i | ci | di | pi | zi | ui | vi |
| --- | --- | --- | --- | --- | --- | --- |
| 0 | 196 | 34 | 5 | 26 | 4 | -23 |
| 1 | 34 | 26 | 1 | 8 | -3 | 4 |
| 2 | 26 | 8 | 3 | 2 | 1 | -3 |
| 3 | 8 | 2 | 4 | 0 | 0 | 1 |

Rozšírený Euklidov algoritmus
-----------------------------

### Odvodenie

Nech {\displaystyle k} je iterácia v Euklidovom algoritme, v ktorej bol nájdený najväčší spoločný deliteľ dvoch kladných celých čísel {\displaystyle d=NSD(m,n)=d\_{k}}, čiže pre ktoré platí {\displaystyle z\_{k}=0}. Pre každé {\displaystyle i=0,1,2,...k-1} vyjadrime {\displaystyle z\_{i}} ako lineárnu kombináciu čísel {\displaystyle m} a {\displaystyle n}, t.j. hľadáme dvojicu celých čísel {\displaystyle a\_{i}} a {\displaystyle b\_{i}}, pre ktoré platí {\displaystyle z\_{i}=ma\_{i}+nb\_{i}\qquad (16)}

* Pre {\displaystyle i=0} z rovnosti (1) vyplýva:

{\displaystyle {\begin{array}{lclr}z\_{0}&=&c\_{0}-d\_{0}p\_{0}\\&=&m-np\_{0}&\qquad (17)\end{array}}}
preto
{\displaystyle {\begin{array}{lclr}a\_{0}&=&1&\qquad (18)\\b\_{0}&=&-p\_{0}&\qquad (19)\end{array}}}
* Pre {\displaystyle i=1} z (1) vyplýva:

{\displaystyle {\begin{array}{lclr}z\_{1}&=&c\_{1}-d\_{1}p\_{1}&\qquad (20)\end{array}}}
a podľa (2) a (3):
{\displaystyle {\begin{array}{lclcl}c\_{1}&=&d\_{0}&=&n\\d\_{1}&=&z\_{0}\end{array}}}
Preto
{\displaystyle {\begin{array}{lcl}z\_{1}&=&n-z\_{0}p\_{1}\end{array}}}
Po dosadení za {\displaystyle z\_{0}} zo (17) dostaneme:
{\displaystyle {\begin{array}{lclr}z\_{1}&=&n-mp\_{1}+np\_{0}p\_{1}\\&=&-mp\_{1}+n(1+p\_{0}p\_{1})&\qquad (21)\end{array}}}
A teda
{\displaystyle {\begin{array}{lclr}a\_{1}&=&-p\_{1}&\qquad (22)\\b\_{1}&=&1+p\_{0}p\_{1}&\qquad (23)\end{array}}}
* Pre ľubovoľné {\displaystyle i>1} je podľa (2) a (3):

{\displaystyle {\begin{array}{lclcl}c\_{i}&=&d\_{i-1}&=&z\_{i-2}\\d\_{i}&=&z\_{i-1}\end{array}}}
Dosadením do (1) dostávame:
{\displaystyle {\begin{array}{lclcl}z\_{i}&=&c\_{i}-d\_{i}p\_{i}&=&z\_{i-2}-z\_{i-1}p\_{i}\end{array}}}
Ak poznáme (16) pre {\displaystyle i-1} a {\displaystyle i-2}, dostávame:
{\displaystyle {\begin{array}{lcl}z\_{i}&=&ma\_{i-2}+nb\_{i-2}-(ma\_{i-1}+nb\_{i-1})p\_{i}\\&=&m(a\_{i-2}-a\_{i-1}p\_{i})+n(b\_{i-2}-b\_{i-1}p\_{i})\end{array}}}
Preto pre ľubovoľné {\displaystyle i>1} je:
{\displaystyle {\begin{array}{lclr}a\_{i}&=&a\_{i-2}-a\_{i-1}p\_{i}&\qquad (24)\\b\_{i}&=&b\_{i-2}-b\_{i-1}p\_{i}&\qquad (25)\end{array}}}
* Ak sa nasledujúcim spôsobom zadefinujú hodnoty {\displaystyle z\_{i}}, {\displaystyle a\_{i}} a {\displaystyle b\_{i}} aj pre {\displaystyle i=-1} a {\displaystyle i=-2}:

{\displaystyle {\begin{array}{lcllcllcl}z\_{-2}&=&m,&a\_{-2}&=&1,&b\_{-2}&=&0\\z\_{-1}&=&n,&a\_{-1}&=&0,&b\_{-1}&=&1\end{array}}}
bude rovnosť (16) platiť aj pre ne a vzťahy (24), (25) je možné použiť aj na zistenie {\displaystyle a\_{0},a\_{1},b\_{0},b\_{1}}.

### Formálny zápis

**1.** [Inicializácia premenných.] Priraďte *c ← m, d ← n, a\_old ← 1, b\_old ← 0, a ← 0, b ← 1*.

**2.** [Výpočet podielu a zvyšku.] Vypočítajte celočíselný podiel *p* a zvyšok *z* po delení *c / d*. 

**3.** [Ukončovacia podmienka.] Ak *z = 0* tak koniec, pričom *NSD(m,n) = d = m·a + n·b*

**4.** [Výpočet *a* a *b*.] Priraďte *a\_new ← a\_old - a·p, b\_new ← b\_old - b·p*.

**5.** [Redukcia.] Priraďte *c ← d, d ← z, a\_old ← a, a ← a\_new, b\_old ← b, b ← b\_new*. Vráťte sa do bodu 2.

*Poznámka:* Výpočet prebieha súčasne s výpočtom NSD pričom je potrebné mať k dispozícii aj dve posledné dvojice hodnôt {\displaystyle a\_{i},b\_{i}}.

### Použitie na konkrétnom príklade

| i | ci | di | pi | zi | ai | bi |
| --- | --- | --- | --- | --- | --- | --- |
| -2 |  |  |  | 196 | 1 | 0 |
| -1 |  |  |  | 34 | 0 | 1 |
| 0 | 196 | 34 | 5 | 26 | 1 | -5 |
| 1 | 34 | 26 | 1 | 8 | -1 | 6 |
| 2 | 26 | 8 | 3 | 2 | 4 | -23 |
| 3 | 8 | 2 | 4 | 0 |  |  |

Zdroj
-----

* KNUTH, Donald. *Umění programování*. 1. vyd. Zväzok 1. Základní algoritmy. Brno : Computer Press, 2008. ISBN 978-80-251-2025-5. Kapitola 1. Základní principy.

Iné projekty
------------

Wikiknihy
* Spolupracuj na Wikiknihách Wikiknihy ponúkajú texty a príručky na tému **Rozšírený Euklidov algoritmus**