|
Serwis Edukacyjny w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
Sposób znajdowania największego wspólnego dzielnika opisał Euklides i sposób ten nosi nazwę algorytmu Euklidesa. Uczony grecki rozwiązał problem geometrycznie. Poszukiwał tzw. wspólnej miary dla dwóch odcinków. Co to jest wspólna miara? To najdłuższy odcinek, który można jednocześnie odłożyć w każdym z dwóch odcinków:
Euklides zauważył, iż jeśli dwa odcinki posiadają wspólną miarę, to również ich różnica posiada tę miarę:

Zatem, aby znaleźć tę miarę, należy od dłuższego odcinka odejmować mniejszy, aż oba odcinki będą równe. Wtedy, to co pozostanie, jest ich wspólną miarą. Przechodząc na liczby, algorytm ten formułujemy następująco:
Dane wejściowe: dwie dodatnie liczby całkowite a i b.
Dane wyjściowe: a = NWD liczb a i b.
Dopóki liczby a i b są różne, od większej liczby odejmujemy mniejszą. Gdy liczby się zrównają, to są równe NWD.
Zobaczmy działanie tego algorytmu na przykładzie liczbowym:
| a | b | operacja |
18 |
30 |
|
18 |
12 |
b ← b - a |
6 |
12 |
a ← a - b |
6 |
6 |
b ← b -a |
6 |
6 |
NWD = 6 |
(1) a ← 23 - 5 = 18 (2) a ← 18 - 5 = 13 (3) a ← 13 - 5 = 8 (4) a ← 8 - 5 = 3
Zwróć uwagę, iż pętla wykonuje tu tyle obiegów, ile wynosi wynik dzielenia całkowitoliczbowego liczby większej przez mniejszą, a liczba większa otrzymuje na końcu wartość reszty z tego dzielenia:
23 : 5 = 4 i reszta 3
Jeśli liczby różnią się bardzo, to pętla wykonuje dużo obiegów. Uruchom poprzedni program i wpisz liczby 2 i 40000000000. Zauważ, iż wykonanie 20 miliardów odejmowań zajmuje komputerowi pewną chwilę czasu (zależnie od szybkości mikroprocesora).
Znajdowanie NWD --------------- Wpisz 2 liczby : 2 40000000000 NWD = 2 Process returned 0 (0x0) execution time : 55.005 s |
Zamiast wykonywać odejmowania, możemy wykorzystać operację wyliczania reszty z dzielenia, którą i tak odejmowania wyliczają. Następne spostrzeżenie dotyczy reszt z dzielenia: reszta jest zawsze mniejsza od dzielnika:
5 : 3 = 1 i reszta 2; 2 < 3
Zatem większa liczba, po umieszczeniu w niej reszty z dzielenia stanie się liczbą mniejszą i teraz ona powinna być dzielnikiem. Aby nad tym zapanować, użyjmy dodatkowej zmiennej r, w której będziemy przechowywać chwilowo resztę z dzielenia. Plan jest następujący:
Pętla przyjmie następujący wygląd:
Zobaczmy jak to działa na przykładzie liczb 32 i 12:
| a | b | r | |
32 |
12 |
8 |
|
12 |
8 |
4 |
|
8 |
4 |
0 |
|
4 |
0 |
|
NWD = 4 |
Zwróć uwagę, iż w trakcie działania tego algorytmu zawartości zmiennych przesuwają się z b do a, z r do b. Gdy b osiągnie 0, algorytm kończy działanie.
Założyliśmy, że a jest liczbą większą, a b jest liczbą mniejszą. A co się stanie, gdy będą równe? Zobaczmy:
| a | b | r | |
12 |
12 |
0 |
|
12 |
0 |
|
NWD = 12 |
Algorytm zakończy pracę po jednym obiegu.
A co będzie, jeśli liczby są w złej kolejności (tzn. większa - mniejsza)? Sprawdźmy:
| a | b | r | |
12 |
32 |
12 |
|
32 |
12 |
8 |
|
12 |
8 |
4 |
|
8 |
4 |
0 |
|
12 |
0 |
|
NWD = 12 |
Co się okazało? Jeśli dane są w złej kolejności, to pierwszy obieg je uporządkuje (dlaczego?) i algorytm w efekcie wykona o jeden obieg więcej niż dla danych uporządkowanych. To bardzo dobra cecha algorytmu - odporność na niekorzystną konfigurację danych wejściowych.
Dane wejściowe: dwie nieujemne liczby całkowite a i b.
Dane wyjściowe: a = NWD liczb a i b.
Dopóki b jest różne od zera, zastąp a liczbą b, a
b zastąp resztą z dzielenia pierwotnego a przez b.
Uruchom ten program z danymi, które poprzednio spowodowały długi czas obliczeń:
Znajdowanie NWD --------------- Wpisz 2 liczby : 2 40000000000 NWD = 2 Process returned 0 (0x0) execution time : 11.352 s |
Wynik otrzymujemy praktycznie natychmiast, czas pokazany powyżej dotyczy czasu wprowadzania danych z klawiatury.
Ta postać algorytmu Euklidesa jest preferowana w informatyce.

Aby skrócić ułamek, znajdujemy NWD licznika i mianownika, po czym dzielimy licznik i mianownik przez NWD.
Dane wejściowe: lk – licznik ułamka, mk – mianownik ułamka, lk, mk – liczby nieujemne, mk różne od 0.
Dane wyjściowe: lk – licznik ułamka skróconego, mk – mianownik ułamka skróconego
6 × 1 = 6 6 × 2 = 12 6 × 3 = 18 ... |
Wspólną wielokrotnością dwóch liczb jest taka liczba, która stanowi wielokrotność każdej z nich, tzn. jest podzielna przez każdą z liczb. Np. wspólnymi wielokrotnościami liczb 6 i 9 są:
6 × 3 = 18 = 9 × 2 6 × 6 = 36 = 9 × 4 6 × 9 = 54 = 9 × 6 ... |
Najmniejszą wspólną wielokrotnością NWW dwóch liczb jest najmniejsza z liczb podzielnych przez każdą z nich. W powyższym przypadku NWW(6,9) jest równe 18, bo 18 dzieli się przez 6 i dzieli się przez 9 i jest najmniejszą z liczb o takiej własności.
Aby znaleźć NWW liczb a i b, dzielimy ich iloczyn przez ich NWD. Na przykład dla liczb 6 i 9, NWD(6,9) = 3, zatem:

Dane wejściowe: dwie dodatnie liczby całkowite a, b
Dane wyjściowe: nww - najmniejsza wspólna wielokrotność liczb
a i b
Dane wejściowe: dwie dodatnie liczby całkowite a, b
Dane wyjściowe: informacja, czy liczby a i b są, czy nie są
względnie pierwsze
Istnieje więcej zastosowań algorytmu Euklidesa, np. w kryptografii. Część z nich omówimy w dalszej części kursu.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.