Algorytm Euklidesa to jedno z najstarszych znanych algorytmicznych rozwiązań matematycznych, stosowane do wyznaczania największego wspólnego dzielnika (NWD) dwóch liczb. Znajduje on szerokie zastosowanie w różnych dziedzinach matematyki, w tym w operacjach na ułamkach.
Kołdra patchworkowa składa się z kawałków materiału, które są zszywane w prostokątne lub kwadratowe wzory. Przy jej projektowaniu można wykorzystać algorytm Euklidesa do określenia największego możliwego rozmiaru powtarzających się elementów. Jeśli np. mamy kawałki materiału o wymiarach 24 cm x 18 cm, to największy możliwy kwadratowy element można obliczyć, znajdując NWD(24,18).
Największy wspólny dzielnik (NWD) to największa liczba naturalna, która dzieli dane liczby całkowite bez reszty. Przykładowo:
NWD(36, 24) = 12
NWD(48, 18) = 6
Metoda naiwna polega na sprawdzaniu wszystkich dzielników obu liczb i wybieraniu największego wspólnego.
Przykład: Dla liczb 36 i 24:
Poniższy kod sprawdza wszystkie liczby od 1 do minimum z podanych liczb i wybiera największą, która dzieli obie liczby bez reszty. Jest to prosty, ale nieefektywny sposób obliczania NWD, który może być znacznie ulepszony np. poprzez algorytm Euklidesa.
def nwd_naiwny(a, b):
"""
Naiwny algorytm wyznaczania największego wspólnego dzielnika (NWD)
polegający na sprawdzaniu wszystkich możliwych dzielników od 1 do min(a, b).
"""
nwd = 1
for i in range(1, min(a, b) + 1):
if a % i == 0 and b % i == 0:
nwd = i
return nwd
# Przykładowe użycie
liczba1 = int(input("Podaj pierwszą liczbę: "))
liczba2 = int(input("Podaj drugą liczbę: "))
wynik = nwd_naiwny(liczba1, liczba2)
print(f"NWD({liczba1}, {liczba2}) = {wynik}")
Algorytm Euklidesa wykorzystuje operację dzielenia z resztą i działa w następujący sposób:
Przykład dla NWD(36, 24):
Poniższy kod korzysta z algorytmu Euklidesa, który iteracyjnie (Słowo iteracyjnie pochodzi od terminu iteracja, który oznacza powtarzanie jakiegoś procesu lub czynności wielokrotnie, aż do osiągnięcia określonego rezultatu.) oblicza resztę z dzielenia i zamienia argumenty, aż druga liczba stanie się zerem. Wówczas pierwsza liczba to NWD. Możesz przetestować ten kod, wpisując dwie liczby w konsoli.
def nwd(a: int, b: int) -> int:
"""Funkcja oblicza największy wspólny dzielnik (NWD) dwóch liczb przy użyciu algorytmu Euklidesa z dzieleniem."""
while b:
a, b = b, a % b
return a
# Przykładowe użycie
if __name__ == "__main__":
x = int(input("Podaj pierwszą liczbę: "))
y = int(input("Podaj drugą liczbę: "))
print(f"NWD({x}, {y}) = {nwd(x, y)}")
Algorytm Euklidesa jest skutecznym sposobem wyznaczania największego wspólnego dzielnika, co ma kluczowe znaczenie w operacjach na ułamkach oraz w innych praktycznych zastosowaniach. Jest on znacznie szybszy niż metoda naiwna i pozwala na efektywne obliczenia nawet dla dużych liczb.