Grafika przedstawia dwa splecione symbole węży. Jeden jest niebieski, a drugi żółty.
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 Euklidesa opisuje metodę znajdowania największego wspólnego dzielnika dwóch liczb naturalnych. Nazwa pochodzi od greckiego matematyka Euklidesa, który jako pierwszy opisał algorytm w IV w p.n.e., chociaż nie był jego autorem. Problem wyznaczania NWD rozwiązywany jest na wiele sposobów, w tym materiale wykorzystamy wersję opartą na odejmowaniu.
NWD
Największy wspólny dzielnik (NWD) dwóch liczb naturalnych a i b większych od 0 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, w której licznik i mianownik są liczbami względnie pierwszymi, czyli NWD(a, b) = 1.
Algorytm Euklidesa z zastosowaniem odejmowania
Skonstruujemy algorytm, który obliczy największy wspólny dzielnik dwóch dodatnich liczb naturalnych.
Specyfikacja algorytmu:
Dane:
a, b – dodatnie liczby naturalne
Wynik:
d - dodatnia liczba naturalna, NWD(a, b)
Do rozwiązania postawionego zadania użyjemy algorytmu Euklidesa w wersji z odejmowaniem.
Przykład 1
Przeanalizujmy wyznaczanie NWD według algorytmu Euklidesa z wykorzystaniem odejmowania dla danych: a = 4, b = 10.
Powtórzenia
a
b
działanie
1
4
10
b = 10 - 4
2
4
6
b = 6 - 4
3
4
2
a = 4 - 2
4
2
2
-
Liczba powtórzeń: 3. Wynik: NWD (4, 10) = 2
Z powyższego przykładu wynika, że dopóki liczby a i b są różne, w każdym powtórzeniu sprawdzamy, która liczba jest większa. Jeżeli a > b, obliczamy a = a - b, w przeciwnym razie wyliczamy b = b - a. Kiedy a i b są równe, wynikiem jest dowolna z tych liczb.
Zapiszmy algorytm w postaci listy kroków:
Wczytaj a, b.
Jeżeli a jest równe b, przejdź do kroku 5.
Jeżeli a > b, zmiennej a przypisz a - b, w przeciwnym razie b przypisz b - a.
Przejdź do kroku 2.
Wypisz a i zakończ algorytm.
Przeanalizujmy również schemat blokowy algorytmu:
R7eTw2k5l821C
Na grafice widoczny jest schemat blokowy ilustruje implementację klasycznego algorytmu Euklidesa służącego do obliczania największego wspólnego dzielnika (NWD). Schemat składa się z: zielonego owalu z napisem start.
Kolejnym elementem jest blok purpurowy równoległobok zawierający instrukcje "Wczytaj liczbę a" oraz "Wczytaj liczbę b".
Główna Pętla Algorytmiczna i Warunki Decyzyjne.
Centralnym elementem schematu jest struktura decyzyjna przedstawiona w formie niebieskiego rombu z warunkiem "Jeżeli a = b". W przypadku gdy wartości zmiennych a i b są równe, algorytm przechodzi do fazy zakończenia poprzez wyprowadzenie wyniku. Alternatywnie, gdy warunек równości nie jest spełniony, następuje przejście do kolejnej fazy przetwarzania danych.
Kolejnym elementem jest niebieski romb, zawiera warunek "Jeżeli a > b" i służy do określenia, która z dwóch zmiennych powinna zostać zmodyfikowana w bieżącej iteracji.
Operacje Arytmetyczne i Modyfikacja Zmiennych
Schemat zawiera dwa prostokątne elementy w kolorze jasnoniebieskim reprezentujące operacje arytmetyczne "a = a - b" oraz "b = b - a".
Gdy warunek a = b zostanie spełniony, algorytm przechodzi do fazy wyprowadzenia wyniku poprzez element "Wypisz a" przedstawiony w formie purpurowego równoległoboku. W tym momencie zmienna a (równa również zmiennej b) zawiera wartość największego wspólnego dzielnika liczb wprowadzonych na początku algorytmu. Wybór wyprowadzenia zmiennej a jest arbitralny, gdyż w stanie końcowym obie zmienne mają identyczną wartość będącą poszukiwanym NWD.
Element końcowy STOP, reprezentowany przez czerwony owal, oznacza formalne zakończenie wykonywania algorytmu.
Schemat blokowy algorytmu
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Wyrażenie a != b interpretujemy jako „a różne od b”.
Z obydwu sposobów zapisu algorytmu wynika, że na początku pobieramy dane wejściowe, czyli dwie dodatnie liczby całkowite. Następnie porównujemy je i większą pomniejszamy o mniejszą. Operacje te powtarzają się dopóki liczby a i b są różne. Kiedy zrównają się, wyprowadzamy wynik, tj. dowolną z tych liczb, i kończymy.
Notatnik
RwQTyLx3QQNTf
Miejsce na Twoje notatki: (Uzupełnij).
Animacja
Polecenie 1
Zapoznaj się z animacją, która pokazuje, w jaki sposób możemy uzyskać odpowiedź na pytanie o to, ile trzeba wykonać operacji odejmowania, zanim znajdziemy największy wspólny dzielnik z wykorzystaniem algorytmu Euklidesa.
Uruchom program nwd_odejmowanie_licznik.py i przetestuj jego działanie dla podanych danych:
Linia 1. kratka Pierwszy zestaw danych.
Linia 2. a znak równości 8.
Linia 3. b znak równości 32.
Linia 5. kratka Drugi zestaw danych.
Linia 6. a znak równości 8.
Linia 7. b znak równości 2848.
Linia 9. kratka Trzeci zestaw danych.
Linia 10. a znak równości 2.
Linia 11. b znak równości 10.
Linia 13. kratka Czwarty zestaw danych.
Linia 14. a znak równości 2.
Linia 15. b znak równości 22222.
# Pierwszy zestaw danych
a = 8
b = 32
# Drugi zestaw danych
a = 8
b = 2848
# Trzeci zestaw danych
a = 2
b = 10
# Czwarty zestaw danych
a = 2
b = 22222
RlvYg4byQuiPH
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).
Oczekiwane wyniki:
Linia 1. NWD otwórz nawias okrągły 8 przecinek 32 zamknij nawias okrągły znak równości 8.
Linia 2. Liczba operacji znak równości 3.
Linia 4. NWD otwórz nawias okrągły 8 przecinek 2848 zamknij nawias okrągły znak równości 8.
Linia 5. Liczba operacji znak równości 355.
Linia 7. NWD otwórz nawias okrągły 2 przecinek 10 zamknij nawias okrągły znak równości 2.
Linia 8. Liczba operacji znak równości 4.
Linia 10. NWD otwórz nawias okrągły 2 przecinek 22222 zamknij nawias okrągły znak równości 2.
Linia 11. Liczba operacji znak równości 11110.
NWD( 8, 32 ) = 8
Liczba operacji = 3
NWD( 8, 2848 ) = 8
Liczba operacji = 355
NWD( 2, 10 ) = 2
Liczba operacji = 4
NWD( 2, 22222 ) = 2
Liczba operacji = 11110
Z wyników można wywnioskować, że liczba operacji zależy od różnicy danych wejściowych – im większa różnica między dwiema liczbami, tym więcej operacji.
1
Polecenie 3
Do wykonania polecenia wykorzystaj następujące dwa zestawy danych:
Linia 1. kratka Pierwszy zestaw danych.
Linia 2. a znak równości 34.
Linia 3. b znak równości 16.
Linia 5. kratka Drugi zestaw danych.
Linia 6. a znak równości 16.
Linia 7. b znak równości 34.
# Pierwszy zestaw danych
a = 34
b = 16
# Drugi zestaw danych
a = 16
b = 34
R1dQ7DWSQpJk9
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).
Oczekiwane wyniki:
Linia 1. NWD otwórz nawias okrągły 34 przecinek 16 zamknij nawias okrągły znak równości 2.
Linia 2. Liczba operacji znak równości 9.
Linia 3. NWD otwórz nawias okrągły 16 przecinek 34 zamknij nawias okrągły znak równości 2.
Linia 4. Liczba operacji znak równości 9.
NWD( 34, 16 ) = 2
Liczba operacji = 9
NWD( 16, 34 ) = 2
Liczba operacji = 9
Wyniki sugerują, że liczba operacji nie zależy od kolejności danych.
Polecenie 4
R1YSudRpoDHj7
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).
Wyniki dla przykładowych danych:
Linia 1. kratka Pierwszy zestaw.
Linia 2. a znak równości 28.
Linia 3. b znak równości 4.
Linia 5. kratka Wyniki.
Linia 6. Liczba operacji znak równości 6.
Linia 7. NWD otwórz nawias okrągły 28 przecinek 4 zamknij nawias okrągły znak równości 4.
Linia 9. kratka Drugi zestaw.
Linia 10. a znak równości 4.
Linia 11. b znak równości 28.
Linia 13. kratka Wyniki.
Linia 14. NWD otwórz nawias okrągły 4 przecinek 28 zamknij nawias okrągły znak równości 4.
Linia 15. Liczba operacji znak równości 6.
Linia 17. kratka Trzeci zestaw.
Linia 18. a znak równości 4.
Linia 19. b znak równości 280.
Linia 21. kratka Wyniki.
Linia 22. NWD otwórz nawias okrągły 4 przecinek 280 zamknij nawias okrągły znak równości 4.
Linia 23. Liczba operacji znak równości 69.
# Pierwszy zestaw
a = 28
b = 4
# Wyniki
Liczba operacji = 6
NWD( 28 , 4 ) = 4
# Drugi zestaw
a = 4
b = 28
# Wyniki
NWD( 4, 28 ) = 4
Liczba operacji = 6
# Trzeci zestaw
a = 4
b = 280
# Wyniki
NWD( 4, 280 ) = 4
Liczba operacji = 69
Wyniki potwierdzają, że liczba operacji zależy od różnicy danych wejściowych, ale nie zależy od ich kolejności.
Zestaw ćwiczeń interaktywnych
RY9rpifYMr52W
Ćwiczenie 1
Przykładowy wygląd zakładki zadania. Pod poleceniem znajdują się panele z tekstem z miejscem do oznaczenia prawidłowej odpowiedzi. Poniżej znajduje się panel z napisem SPRAWDŹ a pod nim napis Pokaż odpowiedź.
Przykładowy wygląd zakładki zadania. Pod poleceniem znajdują się panele z tekstem z miejscem do oznaczenia prawidłowej odpowiedzi. Poniżej znajduje się panel z napisem SPRAWDŹ a pod nim napis Pokaż odpowiedź.
Źródło: Robert Bednarz, licencja: CC BY 3.0.
REjm0EzD1sX4T
Ćwiczenie 2
Przykładowy wygląd zakładki zadania. Pod poleceniem znajdują się panele z tekstem z miejscem do oznaczenia prawidłowej odpowiedzi. Poniżej znajduje się panel z napisem SPRAWDŹ a pod nim napis Pokaż odpowiedź.
Przykładowy wygląd zakładki zadania. Pod poleceniem znajdują się panele z tekstem z miejscem do oznaczenia prawidłowej odpowiedzi. Poniżej znajduje się panel z napisem SPRAWDŹ a pod nim napis Pokaż odpowiedź.
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RRvpBsyDPhSUv
Ćwiczenie 3
Przykładowy wygląd zakładki zadania. Pod poleceniem znajdują się panele z tekstem z miejscem do oznaczenia prawidłowej odpowiedzi. Poniżej znajduje się panel z napisem SPRAWDŹ a pod nim napis Pokaż odpowiedź.
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RARugbyugq6pi
Ćwiczenie 4
Przykładowy wygląd zakładki zadania. Pod poleceniem znajdują się panele z tekstem z miejscem do oznaczenia prawidłowej odpowiedzi. Poniżej znajduje się panel z napisem SPRAWDŹ a pod nim napis Pokaż odpowiedź.
Źródło: Robert Bednarz, licencja: CC BY 3.0.
1
Ćwiczenie 5
Rq5QSmwpt0Ywx
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).
Dla liczb a = 24, b = 10: 24 10 14 10 4 10 4 6 4 2 2 2
Dla liczb a = 16 i b = 24: 16 24 16 8 8 8
R1VFoXMOoCetq
Ćwiczenie 6
Przykładowy wygląd zakładki zadania. Pod poleceniem znajdują się panele ułożone po cztery w dwóch rzędach. Każdy z paneli zawiera treści do połączenia w pary. Poniżej znajduje się panel z napisem SPRAWDŹ a pod nim napis Pokaż odpowiedź.
Przykładowy wygląd zakładki zadania. Pod poleceniem znajdują się panele ułożone po cztery w dwóch rzędach. Każdy z paneli zawiera treści do połączenia w pary. Poniżej znajduje się panel z napisem SPRAWDŹ a pod nim napis Pokaż odpowiedź.
Źródło: Robert Bednarz, licencja: CC BY 3.0.
R1HCfFx0WnV16
Ćwiczenie 7
Przykładowy wygląd zakładki zadania. Pod poleceniem znajdują się panele z tekstem z miejscem do oznaczenia prawidłowej odpowiedzi. Poniżej znajduje się panel SPRAWDŹ a pod nim napis Pokaż odpowiedź.
Źródło: Robert Bednarz, licencja: CC BY 3.0.
311
Ćwiczenie 8
Wykonaj kolejne ćwiczenia.
R1A9wBV4KXzaF
Źródło: GroMar, licencja: CC BY 3.0.
Poprawny wynik działania programu dla a = 10 i b = 16:
Linia 1. 10 6 kratka wartości zmiennych a i b po 1 iteracji.
Linia 2. 4 6 kratka wartości zmiennych a i b po 2 iteracji.
Linia 3. 4 2 kratka wartości zmiennych a i b po 3 iteracji.
Linia 4. 2 2 kratka wartości zmiennych a i b po 4 iteracji.
Linia 5. 2 kratka wartość NWD otwórz nawias okrągły a przecinek b zamknij nawias okrągły.
10 6 # wartości zmiennych a i b po 1 iteracji
4 6 # wartości zmiennych a i b po 2 iteracji
4 2 # wartości zmiennych a i b po 3 iteracji
2 2 # wartości zmiennych a i b po 4 iteracji
2 # wartość NWD(a, b)
Wzoruj się na kodzie obliczającym i zwracającym NWD(a, b), który omówiony został w materiale.
Ważne!
Odpowiedzi mogą w niewielkim stopniu różnić się od napisanego przez ciebie kodu, zależnie od kolejności definiowania zmiennych i przypisywania.
Krok pierwszy:
Linia 1. a znak równości 10.
Linia 2. b znak równości 16.
a = 10
b = 16
Krok drugi:
Linia 1. def nwd otwórz nawias okrągły a przecinek b zamknij nawias okrągły dwukropek.
Linia 2. pass.
def nwd(a,b):
pass
Krok trzeci:
Linia 1. while a wykrzyknik znak równości b dwukropek.
Linia 2. pass.
while a != b:
pass
Krok czwarty:
Linia 1. if a zamknij nawias ostrokątny b dwukropek.
Linia 2. a znak równości a minus b.
Linia 3. else dwukropek.
Linia 4. b znak równości b minus a.
if a > b:
a = a - b
else:
b = b - a
Krok piąty:
Linia 1. print otwórz nawias okrągły a przecinek b zamknij nawias okrągły.
Linia 2. return a.
print(a, b)
return a
Krok szósty:
Linia 1. print otwórz nawias okrągły nwd otwórz nawias okrągły a przecinek b zamknij nawias okrągły zamknij nawias okrągły.
print(nwd(a, b))
Gotowy kod:
Linia 1. a znak równości 10.
Linia 2. b znak równości 16.
Linia 4. def nwd otwórz nawias okrągły a przecinek b zamknij nawias okrągły dwukropek.
Linia 5. while a wykrzyknik znak równości b dwukropek.
Linia 6. if a zamknij nawias ostrokątny b dwukropek.
Linia 7. a znak równości a minus b.
Linia 8. else dwukropek.
Linia 9. b znak równości b minus a.
Linia 10. print otwórz nawias okrągły a przecinek b zamknij nawias okrągły.
Linia 11. return a.
Linia 13. print otwórz nawias okrągły nwd otwórz nawias okrągły a przecinek b zamknij nawias okrągły zamknij nawias okrągły.
a = 10
b = 16
def nwd(a, b):
while a != b:
if a > b:
a = a - b
else:
b = b - a
print(a, b)
return a
print(nwd(a, b))