Euklidischer Algorithmus (GGT) mit mehreren Nummern?
Also ich Schreibe ein Programm in Python, um die GCD von jeder Menge von zahlen.
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)
Die Funktion nimmt eine Liste von zahlen.
Dies sollte 2 ausgeben. Aber ich verstehe nicht, wie die der Algorithmus rekursiv, so kann es mehrere zahlen. Kann sich das jemand erklären?
aktualisiert, funktioniert immer noch nicht:
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, gelöst es
def GCD(a, b):
if b == 0:
return a
else:
return GCD(b, a % b)
verwenden und dann zu reduzieren, wie
reduce(GCD, (30, 40, 36))
InformationsquelleAutor der Frage Tetramputechture | 2013-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da GCD ist assoziativ,
GCD(a,b,c,d)
ist das gleiche wieGCD(GCD(GCD(a,b),c),d)
. In diesem Fall Python ' sreduzieren
Funktion wäre ein guter Kandidat für die Verringerung der Fälle, für dielen(numbers) > 2
um eine einfache 2-Zahl-Vergleich. Der code würde wie folgt Aussehen:Verringern, wendet die angegebene Funktion auf jedes element der Liste, so dass so etwas wie
ist dasselbe wie
Nun das einzige, was Links ist, um code für wenn
len(numbers) <= 2
. Weitergabe nur zwei Argumente zuGCD
imreduce
sorgt dafür, dass Ihre Funktion eine Rekursion höchstens einmal (seitlen(numbers) > 2
nur in der original-Aufruf), die hat den zusätzlichen Vorteil der nie überlaufen des Stacks.InformationsquelleAutor der Antwort alexkonradi
Können Sie
reduce
:entspricht;
helfen auf
reduce
:InformationsquelleAutor der Antwort Ashwini Chaudhary
Den GCD-operator ist kommutativ und assoziativ. Dies bedeutet, dass
So, sobald Sie wissen, wie man es für 2 Nummern, die Sie tun können es für eine beliebige Anzahl
Tun es für zwei zahlen, Sie müssen einfach zu implementieren Euklid-Formel, die ist einfach:
Definieren, wie es funktionieren soll, sagen
euclid(a,b)
. Anschließend können Sie definierengcd(nums)
:Diese nutzt die assoziative Eigenschaft gcd() zur Berechnung der Antwort
InformationsquelleAutor der Antwort torquestomp
Eine Lösung zu finden LCM von mehr als zwei zahlen in PYTHON ist wie folgt:
Hier habe ich +1 in das Letzte argument der Bereich () - Funktion, da die Funktion selbst beginnt von null (0) auf n-1. Klicken Sie auf den hyperlink, um zu wissen, mehr über Bereich() Funktion :
diejenigen, die neu in python Lesen Sie mehr über verringern() Funktion durch den angegebenen link.
InformationsquelleAutor der Antwort sarfarazit08
Versuchen Sie den Aufruf der
GCD()
Sie wie folgt vor,InformationsquelleAutor der Antwort Deepu
Meine Lösung in Python. Hoffe, es hilft.
Einige Dynamik, wie ich es verstehe:
ex.[8, 18] -> [18, 8] -> [8, 2] -> [2, 0]
18 = 8x + 2 = (2y)x + 2 = 2z, wobei z = xy + 1
ex.[18, 22] -> [22, 18] -> [18, 4] -> [4, 2] -> [2, 0]
22 = 18w + 4 = (4x+2)w + 4 = ((2y)x + 2)w + 2 = 2z
InformationsquelleAutor der Antwort Zoe L