Eukleidův algoritmus: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
Rubinbot (diskuse | příspěvky)
m r2.7.3) (Robot: Přidávám he:מחלק משותף מקסימלי
Addbot (diskuse | příspěvky)
m Bot: Odstranění 39 odkazů interwiki, které jsou nyní dostupné na Wikidatech (d:q230848)
Řádek 87: Řádek 87:
{{Link FA|en}}
{{Link FA|en}}


[[ar:خوارزمية أقليدس]]
[[bg:Алгоритъм на Евклид]]
[[bn:ইউক্লিডীয় এলগরিদম]]
[[ca:Algorisme d'Euclides]]
[[de:Euklidischer Algorithmus]]
[[el:Αλγόριθμος του Ευκλείδη]]
[[en:Euclidean algorithm]]
[[eo:Eŭklida algoritmo]]
[[es:Algoritmo de Euclides]]
[[fa:الگوریتم اقلیدس]]
[[fi:Eukleideen algoritmi]]
[[fr:Algorithme d'Euclide]]
[[he:מחלק משותף מקסימלי]]
[[he:מחלק משותף מקסימלי]]
[[hu:Euklideszi algoritmus]]
[[id:Algoritma Euklidean]]
[[it:Algoritmo di Euclide]]
[[ja:ユークリッドの互除法]]
[[ko:유클리드 호제법]]
[[lt:Euklido algoritmas]]
[[lv:Eiklīda algoritms]]
[[ml:യൂക്ലിഡിന്റെ അൽഗൊരിതം]]
[[mn:Евклидийн алгоритм]]
[[nds:Euklidsch Algorithmus]]
[[nl:Algoritme van Euclides]]
[[nn:Euklidsk algoritme]]
[[no:Euklids algoritme]]
[[pl:Algorytm Euklidesa]]
[[pms:Algoritm d'Euclid]]
[[pt:Algoritmo de Euclides]]
[[ro:Algoritmul lui Euclid]]
[[ru:Алгоритм Евклида]]
[[simple:Euclidean algorithm]]
[[sk:Euklidov algoritmus]]
[[sl:Evklidov algoritem]]
[[sr:Еуклидов алгоритам]]
[[sv:Euklides algoritm]]
[[tr:Öklid algoritması]]
[[uk:Алгоритм Евкліда]]
[[vi:Giải thuật Euclid]]
[[zh:輾轉相除法]]

Verze z 7. 3. 2013, 22:16

Eukleidův algoritmus (též Euklidův) je algoritmus, kterým lze určit největšího společného dělitele dvou přirozených čísel, tedy největší číslo takové, že beze zbytku dělí obě čísla. Jedná se o jeden z nejstarších známých netriviálních algoritmů a postupně vznikla řada jeho modifikací například pro příbuzné úlohy. Z nich nejdůležitější je rozšířený Eukleidův algoritmus, kterým lze nalézt Bézoutovu rovnost, neboli vyjádření největšího společného dělitele dvou čísel jejich lineární kombinací.

Algoritmus lze také použít i v jiných algebraických strukturách, než jsou přirozená čísla. Takové struktury se nazývají Eukleidovské obory a jedná se například o některé okruhy mnohočlenů nebo o Eisensteinova čísla.

Algoritmus

Mějme dána dvě přirozená čísla, uložená v proměnných u a v (u>v).
Dokud v není nulové, opakuj:
  Do r ulož zbytek po dělení čísla u číslem v
  Do u ulož v
  Do v ulož r
Konec algoritmu, v u je uložen největší společný dělitel původních čísel.

Popis činnosti

Opakovaně prováděné operace nemění hodnotu největšího společného dělitele (neboť NSD(u,v)=NSD(v,u-qv) pro libovolné celé číslo q), ale v každém kroku se hodnota proměnné v sníží, takže je zřejmé, že v konečném počtu kroků se algoritmus ukončí s tím, že v je nulové. Tehdy obsahuje proměnná u největší společný dělitel, neboť NSD(u,0)=u, což musí být současně největší společný dělitel původních čísel, neboť, jak už bylo uvedeno, hlavní smyčka programu hodnotu největšího společného dělitele nemění.

Vlastnosti algoritmu

Doba provádění programu je závislá na počtu průchodů hlavní smyčkou. Ten je maximální tehdy, jsou-li počáteční hodnoty u a v rovné dvěma po sobě jdoucím členům Fibonacciho posloupnosti. Maximální počet provedených opakování je tedy . Průměrný počet kroků pak je o něco nižší, přibližně .

Ukázka činnosti algoritmu

Mějme čísla u=40902, v=24140. Výpočet probíhá následujícím způsobem:

u v u=v.q+r
40902 24140 40902=24140×1+16762
24140 16762 24140=16762×1+7378
16762 7378 16762=7378×2+2006
7378 2006 7378=2006×3+1360
2006 1360 2006=1360×1+646
1360 646 1360=646×2+68
646 68 646=68×9+34
68 34 68=34×2+0
34 0 konec algoritmu

Největším společným dělitelem čísel 40902 a 24140 je číslo 34.

Historie

Eukleidův algoritmus je pojmenován podle starověkého filozofa Eukleida, který jej uvedl ve svém díle Základy (cca 300 př.n.l.), přestože tento postup zřejmě sám nevynalezl. Jedná se pravděpodobně o nejstarší lidstvu známý netriviální algoritmus, takže po jistou dobu se slovem algoritmus prakticky rozuměl Eukleidův algoritmus.

Poznámky

  • Na základě tohoto algoritmu lze rychle spočítat inverzní prvek k násobení v modulární aritmetice. Největší společný dělitel dvou čísel se dá vyjádřit Bézoutovou rovností jako součet násobků těchto čísel. Pokud je tímto největším společným dělitelem 1, pak dostaneme součin prvku a jeho inverzního. Tedy pokud máme spočítat inverzní prvek x modulo n a vyjde nám vyjádření největšího společného dělitele Bézoutovou rovností ax+bn=1, kde známe všechny proměnné. Máme tak vlastně přímo rovnost ax=1 modulo n a nalezené a je hledaný inverzní prvek. Tento výpočet inverzního prvku je častý v aplikacích teorie čísel, zejména v kryptografii.
  • Tento algoritmus lze použít nejen pro čísla, ale také pro polynomy. Polynom je s jeho využitím možno rozdělit na součin polynomů oddělených dle násobnosti kořenů. Derivace snižuje násobnost každého kořene o 1 a zavádí nové kořeny. Největší společný dělitel s původním polynomem odstraňuje nové kořeny. Například lze tak zjistit kořeny polynomu (x-a)(x-a)(x-a)(x-b)(x-b), přestože neexistuje algoritmus na výpočet kořenů polynomu stupně většího než 4.
  • Tento algoritmus je jeden z těch, u nichž není znám způsob paralelního zpracování, který by podstatně zvýšil výpočetní rychlost.

Externí odkazy

Šablona:Link FA