Rozšírený Euklidov algoritmus

Zo stránky testwiki
Prejsť na navigáciu Prejsť na vyhľadávanie

Šablóna:Na úpravu 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 i je iterácia, c0=m=196, d0=n=34, pi je celočíselný podiel ci/di, zi je zvyšok po delení ci/di, čiže platí ci=dipi+zi, resp:

zi=cidipi(1)

a pre každé i=1,2,3,... je

ci=di1(2)di=zi1(3)

Úlohou Rozšíreného Euklidovho algoritmu je nájsť dvojicu celých čísel a a b, spĺňajúcu rovnosť 2=196a+34b.

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

V uvedenom príklade platí:

2=2683(4)8=34261(5)26=196345(6)

Dosadením ľavej strany rovnosti (5) do rovnosti (4) dostaneme:

2=34(3)+264(7)

a dosadením ľavej strany rovnosti (6) do rovnosti (7) dostaneme výsledok:

2=1964+34(23)(8)

t.j. jednu z možností, ako vyjadriť najväčší spoločný deliteľ dvoch čísel ich lineárnou kombináciou.

Odvodenie

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

d=ciui+divi(9)

Dosadením (2) a (3) do (9) dostaneme:

d=di1ui+zi1vi(10)

a dosadením (1) do (10):

d=di1ui+(ci1di1pi1)vi=ci1vi+di1(uipi1vi)(11)

Porovnaním (11) a (9) dostávame výsledok:

ui1=vi(12)vi1=uipi1vi(13)

Tiež platí:

d=dk=ck0+dk1

preto:

uk=0(14)vk=1(15)

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 ui a vi je potrebné mať k dispozícii aj všetky hodnoty pi.

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 k je iterácia v Euklidovom algoritme, v ktorej bol nájdený najväčší spoločný deliteľ dvoch kladných celých čísel d=NSD(m,n)=dk, čiže pre ktoré platí zk=0. Pre každé i=0,1,2,...,k1 vyjadrime zi ako lineárnu kombináciu čísel m a n, t.j. hľadáme dvojicu celých čísel ai a bi, pre ktoré platí zi=mai+nbi(16)

  • Pre i=0 z rovnosti (1) vyplýva:
z0=c0d0p0=mnp0(17)
preto
a0=1(18)b0=p0(19)
  • Pre i=1 z (1) vyplýva:
z1=c1d1p1(20)
a podľa (2) a (3):
c1=d0=nd1=z0
Preto
z1=nz0p1
Po dosadení za z0 zo (17) dostaneme:
z1=nmp1+np0p1=mp1+n(1+p0p1)(21)
A teda
a1=p1(22)b1=1+p0p1(23)
  • Pre ľubovoľné i>1 je podľa (2) a (3):
ci=di1=zi2di=zi1
Dosadením do (1) dostávame:
zi=cidipi=zi2zi1pi
Ak poznáme (16) pre i1 a i2, dostávame:
zi=mai2+nbi2(mai1+nbi1)pi=m(ai2ai1pi)+n(bi2bi1pi)
Preto pre ľubovoľné i>1 je:
ai=ai2ai1pi(24)bi=bi2bi1pi(25)
  • Ak sa nasledujúcim spôsobom zadefinujú hodnoty zi, ai a bi aj pre i=1 a i=2:
z2=m,a2=1,b2=0z1=n,a1=0,b1=1

bude rovnosť (16) platiť aj pre ne a vzťahy (24), (25) je možné použiť aj na zistenie a0,a1,b0,b1.

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 ai,bi.

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

Iné projekty

Šablóna:Projekt