R78GBM2ZZ46P3
Grafika przedstawia namalowane kredkami cyfry w różnych kolorach oraz różnej wielkości.

I_P_W14_M04 Algorytm Euklidesa

Źródło: Gerald, dostępny w internecie: pixabay.com, domena publiczna.

Na szczęście proces wyznaczania NWD da się zoptymalizować. Przeanalizujmy zmodyfikowaną wersję algorytmu, tzw. obliczanie NWD metodą dzielenia z resztą.

Oto implementacja algorytmu w języku Python:

Linia 1. def NWD podkreślnik modulo otwórz nawias okrągły x przecinek y zamknij nawias okrągły dwukropek. Linia 2. while y zamknij nawias ostrokątny 0 dwukropek. Linia 3. modulo znak równości x procent y. Linia 4. x znak równości y. Linia 5. y znak równości modulo. Linia 6. return x.

Wersja programu, która zlicza wykonane operacje, może wyglądać następująco:

Linia 1. def NWD podkreślnik modulo podkreślnik zliczanie otwórz nawias okrągły x przecinek y zamknij nawias okrągły dwukropek. Linia 2. dzielenia znak równości 0. Linia 3. while y zamknij nawias ostrokątny 0 dwukropek. Linia 4. modulo znak równości x procent y. Linia 5. x znak równości y. Linia 6. y znak równości modulo. Linia 7. dzielenia plus znak równości 1. Linia 9. print otwórz nawias okrągły apostrof NWD apostrof przecinek x przecinek apostrof średnik liczba dzieleń apostrof przecinek dzielenia zamknij nawias okrągły.

Wyznaczmy NWD dla dużych argumentów funkcji. Okaże się, że liczba wykonywanych operacji jest bardzo mała:

Linia 1. NWD podkreślnik modulo podkreślnik zliczanie otwórz nawias okrągły 927566801 przecinek 22 zamknij nawias okrągły. Linia 2. NWD 1 średnik liczba dzieleń 3.
1
Polecenie 1

Możemy obliczyć czas niezbędny do wyznaczenia NWD. Zdefiniujmy funkcję NWD_modulo_zliczanie_czas(x, y), która oprócz liczby operacji zmierzy także czas ich wykonania.

Specyfikacja problemu:

Dane:

  • x, y – liczby całkowite

Wynik:

  • NWD – liczba całkowita, największy wspólny dzielnik liczb xy

  • dzielenia – liczba całkowita, liczba wykonanych operacji

  • t – czas trwania programu; liczba rzeczywista

RNwx1csJkIKTW
Wymyśl pytanie na kartkówkę związane z tematem materiału.
Dla zainteresowanych

Możemy obliczyć NWD dla więcej niż dwóch liczb.

Obliczenie NWD dla trzech liczb odbywa się w dwóch etapach. Najpierw wyznaczamy NWD dla liczb pierwszej i drugiej oraz NWD liczb drugiej i trzeciej. Następnie obliczamy NWD dla otrzymanych wyników. Przedstawmy tę zasadę za pomocą pseudokodu:

Linia 1. obliczenie NWD otwórz nawias okrągły a przecinek b przecinek c zamknij nawias okrągły dwukropek. Linia 3. do zmiennej tymczasowej x przypisz NWD otwórz nawias okrągły a przecinek b zamknij nawias okrągły. Linia 4. do zmiennej tymczasowej y przypisz NWD otwórz nawias okrągły b przecinek c zamknij nawias okrągły. Linia 6. wynikiem będzie NWD otwórz nawias okrągły x przecinek y zamknij nawias okrągły. Linia 8. kratka inny sposób rozwiązania problemu dwukropek. Linia 9. NWD otwórz nawias okrągły a przecinek b przecinek c zamknij nawias okrągły znak równości NWD otwórz nawias okrągły NWD otwórz nawias okrągły a przecinek b zamknij nawias okrągły przecinek c zamknij nawias okrągły.