Definicja
Największy wspólny dzielnik (NWD) dla dwóch liczb jest to największa liczba naturalna, która dzieli każdą z tych liczb bez reszty.
Na przykład dla 16 i 24, największą liczbą naturalną która dzieli te dwie liczby bez reszty jest 8.
Dla liczb 3 i 9 jest to 3.
Natomiast dla liczb 3 i 7 NWD będzie wynosić 1.
NWD rekurencyjnie
Oto najbardziej skrócona wersja rekurencyjnego algorytmu NWD, idealna do zapamiętania:
def nwd(a, b): return nwd(b, a%b) if b else a
Dla jasności, powyższa linijka po rozpisaniu wygląda następująco:
def nwd(a, b):
if b > 0:
return nwd(b, a%b)
else:
return a
W zasadzie to else
możemy, a wręcz powinniśmy w tej sytuacji pominąć:
def nwd(a, b):
if b > 0:
return nwd(b, a%b)
return a
NWD iteracyjnie
Najkrótsza wersja iteracyjnego NWD:
def nwd_i(a, b):
while b:
a, b = b, a%b
return a
Pętla while b:
wykonuje się tak długo, jak b jest większe od 0.
W innych językach programowania niemożliwa jest zamiana wartości dwóch zmiennych jednocześnie bez wykorzystywania zmiennej pomocniczej lub funkcji swap
, jednak w Pythonie jest to możliwe używając zapisu a, b = b, a%b
.
A tak wygląda ten sam algorytm przy wykorzystaniu zmiennej pomocniczej (temp
):
def nwd_i(a, b):
while b:
temp = a
a = b
b = temp%b
return a