Algorytm euklidesowy (GCD) z wieloma liczbami?
Piszę więc program w Pythonie, aby uzyskać GCD o dowolnej liczbie liczb.
def GCD(numbers):
if numbers[-1] == 0:
return numbers[0]
# i'm stuck here, this is wrong
for i in range(len(numbers)-1):
print GCD([numbers[i+1], numbers[i] % numbers[i+1]])
print GCD(30, 40, 36)
Funkcja pobiera listę numerów. Powinno to wydrukować 2. Nie rozumiem jednak, jak rekurencyjnie używać algorytmu, aby mógł obsługiwać wiele liczb. Czy ktoś może wyjaśnić?
zaktualizowany, nadal nie działa:
def GCD(numbers):
if numbers[-1] == 0:
return numbers[0]
gcd = 0
for i in range(len(numbers)):
gcd = GCD([numbers[i+1], numbers[i] % numbers[i+1]])
gcdtemp = GCD([gcd, numbers[i+2]])
gcd = gcdtemp
return gcd
Ok, rozwiązałem to
def GCD(a, b):
if b == 0:
return a
else:
return GCD(b, a % b)
a następnie użyj zmniejszenia, jak
reduce(GCD, (30, 40, 36))