Przejdź do treści

Algorytm Euklidesa - NWD i NWW krok po kroku, dowód

Algorytm Euklidesa

Dla liczb naturalnych ab>0a \ge b > 0, jeśli a=qb+ra = q \cdot b + r, gdzie 0r<b0 \le r < b, to

NWD(a,b)=NWD(b,r),NWD(a,0)=a.\operatorname{NWD}(a, b) = \operatorname{NWD}(b, r), \qquad \operatorname{NWD}(a, 0) = a.

Dzielimy z resztą, aż reszta wyniesie 00 - ostatnia niezerowa reszta to NWD. Ponadto NWW(a,b)=abNWD(a,b)\operatorname{NWW}(a, b) = \dfrac{a \cdot b}{\operatorname{NWD}(a, b)}.

Co mówi twierdzenie

Algorytm Euklidesa to sposób obliczania największego wspólnego dzielnika (NWD) dwóch liczb bez rozkładania ich na czynniki pierwsze. Opiera się na jednym fakcie: NWD dwóch liczb nie zmienia się, gdy większą z nich zastąpimy resztą z jej dzielenia przez mniejszą. Powtarzając ten krok, dostajemy coraz mniejsze liczby, aż reszta wyniesie zero - wtedy ostatnia niezerowa reszta jest szukanym NWD.

Algorytm działa szybko nawet dla liczb, których rozkładu na czynniki nie da się w praktyce znaleźć - dlatego jest podstawą współczesnej kryptografii.

Przykład

Obliczmy NWD(252,198)\operatorname{NWD}(252, 198):

252=1198+54,198=354+36,54=136+18,36=218+0.252 = 1 \cdot 198 + 54, \qquad 198 = 3 \cdot 54 + 36, \qquad 54 = 1 \cdot 36 + 18, \qquad 36 = 2 \cdot 18 + 0.

Ostatnia niezerowa reszta to 1818, więc NWD(252,198)=18\operatorname{NWD}(252, 198) = 18. Stąd od razu:

Wersja z odejmowaniem. Zamiast dzielić, można odejmować mniejszą liczbę od większej: (252,198)(54,198)(54,144)(54,90)(54,36)(18,36)(18,18)(252, 198) \to (54, 198) \to (54, 144) \to (54, 90) \to (54, 36) \to (18, 36) \to (18, 18) - wynik ten sam, tylko kroków jest więcej. W takiej postaci algorytm opisał Euklides.

Założenia

Dowód poprawności

Pokaż dowódUkryj dowód

Krok 1. Te same wspólne dzielniki. Niech a=qb+ra = qb + r. Jeśli dd dzieli aa i bb, to dzieli też r=aqbr = a - qb. I odwrotnie: jeśli dd dzieli bb i rr, to dzieli też a=qb+ra = qb + r. Pary (a,b)(a, b) i (b,r)(b, r) mają więc dokładnie te same wspólne dzielniki, a zatem ten sam największy: NWD(a,b)=NWD(b,r)\operatorname{NWD}(a, b) = \operatorname{NWD}(b, r).

Krok 2. Algorytm się kończy. Reszty tworzą ciąg ściśle malejących liczb nieujemnych (b>r1>r2>0b > r_1 > r_2 > \ldots \ge 0), więc po skończenie wielu krokach któraś reszta wynosi 00.

Krok 3. Wynik. Gdy reszta wynosi 00, mamy parę (d,0)(d, 0), a NWD(d,0)=d\operatorname{NWD}(d, 0) = d. Z kroku 1 ta liczba jest równa NWD liczb wyjściowych. \blacksquare

Rozszerzony algorytm i tożsamość Bézouta

Cofając się po krokach algorytmu, NWD można zapisać jako kombinację liczb wyjściowych. Z przykładu:

18=5436=54(198354)=454198=4(252198)198=42525198.18 = 54 - 36 = 54 - (198 - 3 \cdot 54) = 4 \cdot 54 - 198 = 4(252 - 198) - 198 = 4 \cdot 252 - 5 \cdot 198.

To tożsamość Bézouta: dla dowolnych aa, bb istnieją liczby całkowite xx, yy, że ax+by=NWD(a,b)ax + by = \operatorname{NWD}(a, b). Wniosek: równanie ax+by=cax + by = c ma rozwiązanie w liczbach całkowitych wtedy i tylko wtedy, gdy NWD(a,b)\operatorname{NWD}(a, b) dzieli cc. Na przykład 252x+198y=36252x + 198y = 36 ma rozwiązanie (x=8x = 8, y=10y = -10), a 252x+198y=20252x + 198y = 20 - nie, bo 182018 \nmid 20.

Ile trwa algorytm

Najwięcej kroków wymagają kolejne liczby Fibonacciego: dla 233233 i 144144 potrzeba 1111 dzieleń. Gabriel Lamé udowodnił w 1844 roku, że liczba dzieleń nie przekracza pięciokrotności liczby cyfr mniejszej z liczb - dla liczb stucyfrowych to najwyżej około 500500 kroków, podczas gdy rozkład na czynniki pierwsze takich liczb jest praktycznie niewykonalny.

Po co to komu

Kto i kiedy

Algorytm opisał Euklides w VII księdze „Elementów” (twierdzenia VII.1 i VII.2, ok. 300 r. p.n.e.), w wersji z odejmowaniem. Uchodzi za jeden z najstarszych algorytmów, które wciąż są w powszechnym użyciu. Tożsamość nosi imię francuskiego matematyka Étienne’a Bézouta (XVIII w.), choć dla liczb całkowitych znał ją już wcześniej Claude-Gaspard Bachet de Méziriac (1624).

Najczęstsze pytania

Jak obliczyć NWD algorytmem Euklidesa? Podziel większą liczbę przez mniejszą z resztą, potem dzielnik przez resztę i tak dalej, aż reszta wyniesie 00. Ostatnia niezerowa reszta to NWD.

Jak obliczyć NWW dwóch liczb? Podziel iloczyn liczb przez ich NWD: NWW(a,b)=abNWD(a,b)\operatorname{NWW}(a, b) = \frac{ab}{\operatorname{NWD}(a, b)}.

Czym różni się algorytm Euklidesa od rozkładu na czynniki? Rozkład wymaga znalezienia wszystkich dzielników pierwszych, co dla dużych liczb jest bardzo trudne. Algorytm Euklidesa potrzebuje tylko dzieleń z resztą i działa szybko dla dowolnie dużych liczb.

Co to jest tożsamość Bézouta? Zapis NWD jako kombinacji liczb: ax+by=NWD(a,b)ax + by = \operatorname{NWD}(a, b) dla pewnych całkowitych xx, yy. Współczynniki wyznacza rozszerzony algorytm Euklidesa.

Kiedy liczby są względnie pierwsze? Gdy ich NWD wynosi 11 - algorytm Euklidesa kończy się wtedy resztą 11.

Podsumowanie