Euklidischer Algorithmus

Variante 1

Wir beginnen mit a0=aa_0=a und a1=ba_1=b.

Bildschirm­foto 2023-02-25 um 21.57.26.png

Variante 2

def ggT(a, b):
	a = [a, b]
	while a[-1] > 0:
		a.append(a[-2] % a[-1])
	return a[-2]

Variante 3

Ohne explizites merken der Zahlen in aa.

def ggT(a, b):
	while b > 0:
		a, b = b, a % b
	return a

Laufzeit

Die Laufzeit des Algorithmus lässt sich mit den Fibonacci-Zahlen gut in Abhängigkeit von aa abschätzen.

Dafür sei nn die Zahl an Schritten, die wir abschätzen wollen.

Wir verwenden das rekursive Schema des Algorithmus wobei wir die a=gn+1a=g_{n+1} und b=gnb=g_n setzen. Führen wir damit das ganze Schema durch erhalten wir zum Schluss ggT(a,b)=g1ggT(a,b)=g_1. Wir können nun die Folge gng_n mit den Fibonacci-Zahlen vergleichen und sehen, dass diese immer größer gleich sind:

a=gn+1fn+2.a=g_{n+1}\geq f_{n+2}.

Da wir fn+2f_{n+2} bereits gut abschätzen können, lässt sich das ganze auch für aa abschätzen. Wir erhalten also:

n4.785log10fn+24.785log10a.n \leq 4.785 \log _{10} f_{n+2} \leq 4.785 \log _{10} a.

Der Algorithmus ist also sehr effizient und schnell.