Der größte gemeinsame Teiler (GCD) von a und b ist die größte Zahl, die beide ohne Rest teilt.
Eine Möglichkeit, die GCD zweier Zahlen zu ermitteln, ist der Euklid-Algorithmus, der auf der Beobachtung basiert, dass wenn r
der Rest a
ist , wenn durch geteilt wird b
, dann gcd(a, b) = gcd(b, r)
. Als Basisfall können wir verwenden gcd(a, 0) = a
.
Schreiben Sie eine Funktion namens gcd , die Parameter nimmt a
und b
und gibt ihren größten gemeinsamen Teiler.
Antworten:
Es ist in der Standardbibliothek .
Quellcode aus dem
inspect
Modul in Python 2.7:Ab Python 3.5
gcd
befindet sich immath
Modul ; der infractions
ist veraltet. Außerdem wirdinspect.getsource
für beide Methoden kein erklärender Quellcode mehr zurückgegeben.quelle
fractions.gcd(1, -1)
ist-1
aber1 > -1
dh1
teilen beide1
und-1
ohne Rest und es ist größer als-1
siehe bugs.python.org/issue22477gcd(1, -1) == -1
scheint es mir völlig legitim zu sein.fractions.gcd()
ist (es funktioniert auf euklidischen Ringelementen).math.gcd(1, -1)
kehrt ab Python 3.5 zurück1
.Die Algorithmen mit mn können furchtbar lange laufen.
Dieser ist viel besser:
quelle
x
bevor sie zugewiesen wird. Sie zugewieseny
zux
ersten , so dass nuny
bis zu setzen wird0
(wiey % y
immer 0).Diese Codeversion verwendet den Euklid-Algorithmus zum Auffinden von GCD.
quelle
def gcd(a, b): if b == 0: return a return gcd(b, a % b)
quelle
quelle
Sehr prägnante Lösung mit Rekursion:
quelle
mit Rekursion ,
mit while ,
mit Lambda,
quelle
Ein anderer Ansatz basierend auf dem Euklid-Algorithmus.
quelle
quelle
in Python mit Rekursion:
quelle
quelle
Ich denke, ein anderer Weg ist die Verwendung von Rekursion. Hier ist mein Code:
quelle
gcd(10,5)
...Für
a>b
:Für entweder
a>b
odera<b
:quelle
b, a = a, b
. versuchen Sie mehr über die Sprache zu lesenIch musste so etwas für eine Hausaufgabe mit while-Schleifen machen. Nicht der effizienteste Weg, aber wenn Sie keine Funktion verwenden möchten, funktioniert dies:
quelle
quelle
Dieser Code berechnet die gcd von mehr als zwei Zahlen in Abhängigkeit von der Auswahl durch # den Benutzer, hier gibt der Benutzer die Zahl an
quelle
Der Wertetausch hat bei mir nicht gut funktioniert. Also habe ich einfach eine spiegelähnliche Situation für Zahlen eingerichtet, die entweder in a <b ODER a> b eingegeben werden:
quelle
Hier ist die Lösung, die das Konzept implementiert
Iteration
:quelle
größter_Gemeinsamer Berater (A)
quelle
quelle
break
Aussage erreichen soll.