Algorytm Euklidesa

Ten algorytm jest jednym z najstarszych przepisów - schematów obliczeń. Jest on pomysłowy i szybko daje wynik. Zadaniem jest znalezienie największego wspólnego dzielnika dwóch liczb całkowitych (NWD) - jest to potrzebne na przykład przy skracaniu ułamków. Jak wykonać to zadanie? Pierwszym pomysłem jest sprawdzanie podzielności obu liczb przez kolejne liczby od 2 poczynając, a na mniejszej liczbie kończąc. Można to zrobić na kartce tworząc tabelkę. Przyjrzyjmy się temu sposobowi biorąc liczby 12 i 8:

liczba 1 liczba 2 wspólny dzielnik
12 8 2
12/2=6 8/2=4 2
6/2=3 4/2=2 1

NWD = 2*2*1=4

Algorytm EuklidesaLepszym i szybszym rozwiązaniem problemu jest właśnie algorytm Euklidesa. Opiera się on na fakcie, że jeśli od większej liczby odejmiemy mniejszą, to ta mniejsza liczba i otrzymana różnica będą miały taki sam największy wspólny dzielnik jak pierwotne liczby. Gdy przy kolejnym odejmowaniu otrzymamy parę takich samych liczb, to znaleźliśmy NWD.
Oto plan algorytmu:
Najpierw musimy wczytać dwie liczby, których NWD będziemy poszukiwać. Teraz przystępujemy do tworzenia pętli kolejnych odejmowań. Jeśli liczby nie są sobie równe, to musimy zbadać, która jest większa, odjąć od niej mniejszą i zastąpić ją przez otrzymaną różnicę, a następnie wrócić do początku pętli; w przeciwnym wypadku NWD jest np. pierwszą z nich.
Obok widać schemat blokowy a poniżej ślad algorytmu uzyskany w programie ELI:

Poziom    Wynik         Opis
-------------------------------------------------------------------------
 1                       Algorytm Euklidesa - obliczanie NWD dla 
                           dwóch podanych dodatnich liczb całkowitych.
 1         12            Podaj pierwszą liczbę: {całkowita, dodatnia}
 1         8              Podaj drugą liczbę: {całkowita, dodatnia}
 1         Prawda                   a <> b
 1         Prawda                   a > b
 1         4                        a := a - b
 1         Prawda                   a <> b
 1         Fałsz                    a > b
 1         4                        b := b - a
 1         Fałsz                    a <> b
 1         4             NWD wynosi:
 1                       Koniec.

Szybki algorytm Euklidesa polega na braniu reszty z dzielenia większej liczby przez mniejszą zamiast odejmowania. Gdy reszta ta osiągnie zero należy skończyć pętlę i jako wynik wziąć drugą liczbę. Jest on znacznie efektywniejszy od omawianego powyżej. Sprawdźcie to uruchamiając obie wersje algorytmu.