R12192efrJ5bH
Grafika przedstawia dwa splecione symbole węży. Jeden jest niebieski, a drugi żółty.

Algorytm Euklidesa

Logo języka Python
Źródło: Dnu72, dostępny w internecie: commons.wikimedia.org, licencja: CC BY-SA 4.0.

Algorytm wyznaczania największego wspólnego dzielnika opisany został przez greckiego matematyka Euklidesa. Algorytm ten ma dwie wersje. Pierwsza wykorzystuje odejmowanie i została przedstawiona w poprzednim e‑materiale, druga wersja, wykorzystująca operacje obliczania reszty z dzielenia, zostanie opisana w tym e‑materiale.

NWD

Największy wspólny dzielnik (NWD) dwóch liczb naturalnych ab to największa liczba naturalna d, która jest dzielnikiem każdej z nich, czyli dzieli je bez reszty. Przyjmijmy, że będziemy ją oznaczać jako d = NWD(a, b).

NWD ma wiele zastosowań, m. in. pozwala skracać ułamki zwykłe do postaci nieskracalnej, tzn. takiej, w której licznik i mianownik są liczbami względnie pierwszymi, czyli NWD(a, b) = 1.

Algorytm Euklidesa z zastosowaniem działania reszty z dzielenia

Specyfikacja algorytmu:

Dane wejściowe:

  • a, b – dodatnie liczby naturalne

Wynik:

  • d – dodatnia liczba naturalna, NWD(a,b)

Do rozwiązania postawionego problemu użyjemy algorytmu Euklidesa w wersji z zastosowaniem działania reszty z dzielenia.

Przeanalizujemy schemat blokowy algorytmu.

R1crwcNRkMMEP
Schemat blokowy algorytmu Euklidesa z wykorzystaniem działania reszty z dzielenia
Źródło: Robert Bednarz, licencja: CC BY 3.0.
Przykład 1

Przeanalizujmy wyznaczanie NWD wg algorytmu Euklidesa z wykorzystaniem reszty z dzielenia (zgodnie ze schematem blokowym umieszczonym powyżej) dla danych: a = 76, b = 12.

Powtórzenia

a

b

działanie

1

76

16

r = 76 mod 16 = 12
a = 16
b = 12

2

16

12

r = 16 mod 12 = 4
a = 12
b = 4

3

12

4

r = 12 mod 4 = 0
a = 4
b = 0

0

Wynik: NWD (76, 16) = 4

Liczba powtórzeń: 3

Przykład pokazuje, że dopóki b > 0, powtarzamy wykonywanie następującego zestawu instrukcji: wyliczamy resztę z dzielenia a mod b, do a przypisujemy b, do b przypisujemy wyliczoną resztę. Kiedy b, czyli ostatnia obliczona reszta, wyniesie 0, algorytm kończy działanie, wynikiem jest wartość a, czyli wartość przedostatniej wyliczonej reszty.

Najważniejszą częścią algorytmu jest pętla, która wykonuje się dopóki warunek b > 0 jest prawdziwy. Wewnątrz pętli obliczamy resztę z dzielenia liczb r = a mod b i wykonujemy przypisania: a = b, b = r. Po zakończeniu pętli wypisujemy wynik, tj. wartość a.

Skracanie ułamków

Jednym z zastosowań algorytmu Euklidesa jest skracanie ułamków zwykłych. Wykorzystamy napisany wcześniej program do tego zadania.

Przyjmiemy, że danymi będą licznik i mianownik ułamka, który chcemy skrócić. Powinny to być liczby całkowite większe od 0.

Skracanie ułamka zwykłego polega na podzieleniu licznika i mianownika przez tę samą liczbę - największy wspólny dzielnik licznika i mianownika. W tym wypadku liczbą będzie największy wspólny dzielnik zapisany w zmiennej d. Jeżeli będzie on większy niż 1, wypiszemy skrócony ułamek.

1
Polecenie 1

Przeanalizuj działanie programu dla następujących danych:

Linia 1. kratka Pierwszy zestaw danych. Linia 2. l1 znak równości 9. Linia 3. l2 znak równości 45. Linia 5. kratka Drugi zestaw danych. Linia 6. l1 znak równości 7. Linia 7. l2 znak równości 9.

Notatnik

R1FhhXaq8A0vG
Miejsce na Twoje notatki: (Uzupełnij) .

Symulacja interaktywna

R1HnYmDmqDrqF
Symulacja dotyczy algorytmów do znajdowania największego wspólnego dzielnika (NWD) przy użyciu dwóch metod: odejmowania i dzielenia modulo. Na grafice znajduje się instrukcja dotycząca analizy tych algorytmów. Instrukcja jest umieszczona w ramce z niebieskim obramowaniem, z ilustracją osoby w lewym górnym rogu oraz pytajnikiem w różowym kółku nad ilustracją. Po lewej stronie widnieje tekst: „Korzystając z przygotowanej symulacji, przeanalizuj, jak przebiega znajdowanie NWD w obydwu algorytmach dla wartości podanych w polach zamieszczonych pod symulacją. Zwróć uwagę na wartości, które przyjmują zmienne w kolejnych powtórzeniach oraz liczbę powtórzeń koniecznych do uzyskania wyniku. By wykonać jedno powtórzenie działania pętli, użyj przycisku „Wykonaj jedno powtórzenie”. By obliczyć od razu wynik końcowy, użyj przycisku „Oblicz wynik końcowy'”. W centralnej części grafiki znajdują się dwa prostokąty z pseudokodem algorytmów: pętla wykorzystująca odejmowanie oraz pętla wykorzystująca dzielenie modulo. Poniżej znajdują się pola do wprowadzenia wartości liczb a i b oraz dwa przyciski: „Wykonaj jedno powtórzenie” oraz „Oblicz wynik końcowy”. Pola te umożliwiają użytkownikowi interaktywne wprowadzenie danych i przeprowadzenie symulacji działania algorytmów.
Symulacja interaktywna
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
1
Polecenie 2

Przeanalizuj w symulacji działanie algorytmu Euklidesa z wykorzystaniem odejmowania i działania reszty z dzielenia dla podanych niżej liczb. Podaj wynik oraz liczbę powtórzeń pętli dla każdego z algorytmów.

Do wykonania polecenia wykorzystaj następujące dane:

Linia 1. kratka Pierwszy zestaw. Linia 2. a znak równości 56. Linia 3. b znak równości 3. Linia 5. kratka Drugi zestaw. Linia 6. a znak równości 3. Linia 7. b znak równości 56.
R6mZ14trtjfr1
Wysłuchaj fragmentu książki innego filozofa, Oswalda Spenglera, pt. Zmierzch Zachodu (1918). Zastanów się i wyjaśnij tezę, iż cywilizacja jest dopełnieniem i zakończeniem kultury. Jak ma się ona do kryzysu Zachodu? (Uzupełnij).
1
Polecenie 3

Przeanalizuj w symulacji działanie algorytmu Euklidesa z wykorzystaniem odejmowania i działania reszty z dzielenia dla podanych niżej liczb. Podaj wynik oraz liczbę powtórzeń pętli dla każdego z algorytmów.

Do wykonania polecenia wykorzystaj następujące dane:

Linia 1. kratka Pierwszy zestaw danych. Linia 2. a znak równości 3. Linia 3. b znak równości 566. Linia 5. kratka Drugi zestaw danych. Linia 6. a znak równości 3. Linia 7. b znak równości 5666.
R6HCR7l0uGXZ5
Wysłuchaj fragmentu książki innego filozofa, Oswalda Spenglera, pt. Zmierzch Zachodu (1918). Zastanów się i wyjaśnij tezę, iż cywilizacja jest dopełnieniem i zakończeniem kultury. Jak ma się ona do kryzysu Zachodu? (Uzupełnij).

A teraz... czas na ćwiczenia!

R1TgTJ8iRKu2j
Ćwiczenie 1
Wskaż poprawnie obliczone wartości NWD.
RtFxGsZEAWKkx
Ćwiczenie 2
Wskaż, ile razy wykona się pętla while w algorytmie obliczania NWD z wykorzystaniem reszty z dzielenia dla liczb 170 oraz 2023.
RVsHd9M4sEGB1
Ćwiczenie 3
Zaznacz poprawne dokończenie zdania.
Jeżeli nagłówek funkcji wyliczającej NWD z wykorzystaniem algorytmu Euklidesa z działaniem reszty z dzielenia ma postać def NWD(a, b), pętla wykonująca obliczenia kończy się, kiedy…
RV4IIUDPTx1Mq
Ćwiczenie 4
Uporządkuj podane instrukcje wewnątrz funkcji obliczającej NWD przy użyciu algorytmu Euklidesa z wykorzystaniem dzielenia. Elementy do uszeregowania: 1. a = b, 2. b = r, 3. r = a % b, 4. while b > 0:, 5. return a
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RvQxMmFeAXqSL
Ćwiczenie 5
Zaznacz wszystkie poprawne odpowiedzi.
Do zakodowania pętli obliczającej NWD przy użyciu algorytmu Euklidesa z wykorzystaniem dzielenia użyjesz: Możliwe odpowiedzi: 1. instrukcji pobierania, 2. pętli for, 3. pętli while, 4. instrukcji przypisania, 5. instrukcji warunkowej
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RwlNIhUuLwOfo
Ćwiczenie 6
Po zakończeniu działania pętli w algorytmie Euklidesa obliczającym NWD z wykorzystaniem dzielenia i funkcji wynikiem jest: Możliwe odpowiedzi: 1. przedostatnia obliczona reszta, 2. zmienna b (drugi parametr), 3. ostatnia obliczona reszta, 4. zmienna a (pierwszy parametr)
Źródło: Robebert Bednarz, licencja: CC BY 3.0.
311
Ćwiczenie 7

Uzupełnij program obliczający największy wspólny dzielnik wg algorytmu Euklidesa z wykorzystaniem działania reszty z dzielenia w taki sposób, aby wypisywał wartości przyjmowane przez zmienne r, a, b wykorzystywane w pętli while, liczbę wykonanych iteracji oraz największy wspólny dzielnik zadanych wartości l1 oraz l2.

Specyfikacja problemu:

Dane wejściowe:

  • l1, l2 - liczby naturalne

Wyniki:

  • wartości przyjmowane przez zmienne r, a i b w kolejnych iteracjach pętli while

  • tekst Liczba powtórzeń: oraz liczba iteracji (wartość zmiennej licznik)

  • wartości l1, l2 oraz NWD(l1, l2)

Przykład:

Dla l1 = 63l2 = 8:

Linia 1. 7 8 7. Linia 2. 1 7 1. Linia 3. 0 1 0. Linia 4. Liczba powtórzeń dwukropek 3. Linia 5. 63 8 1.

Ćwiczenie wykonaj w kolejnych etapach w poniższej testerce:

R19FI55kldpP31
Źródło: GroMar Sp. z o.o, licencja: CC BY 3.0.
311
Ćwiczenie 8

Napisz funkcję oblicz_nww(a, b), która będzie obliczała najmniejszą wspólną wielokrotność przekazanych argumentów. Program powinien wyświetlić liczby l1l2 oraz ich najmniejszą wspólną wielokrotność.

Specyfikacja problemu:

Dane wejściowe:

  • l1, l2 – liczby naturalne

Wyniki:

  • liczby l1l2 oraz NWW(l1, l2)

Przykład:

Dla l1 = 7l2 = 3:

Linia 1. 7 3 21.

Ćwiczenie wykonaj w kolejnych etapach w poniższej testerce:

R1AaVqIEjWbW21
Źródło: GroMar Sp. z o.o, licencja: CC BY 3.0.