Eukleidův algoritmus (též Euklidův) je algoritmus, kterým lze určit největší společný dělitel 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.
Mějme dána dvě přirozená čísla, uložená v proměnných u a w. Dokud w není nulové, opakuj: Do r ulož zbytek po dělení čísla u číslem w Do u ulož w Do w ulož r Konec algoritmu, v u je uložen největší společný dělitel původních čísel.
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í.
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ě .
Mějme čísla u = 40902, w = 24140. Výpočet probíhá následujícím způsobem:
u | w | u=w×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.
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.