Erweiterter Euklidischer Algorithmus

Ein Algorithmus um die Gleichung (Satz von Bezout)

zu lösen. Das kann später auch dafür verwendet werden um die Gleichung zu lösen.

Variante 1

Wir können das Schema des euklidischen Algorithmus verwenden um als Linearkombination von und zu schreiben. Dabei eliminieren wir sukzessiv. Systematisch lässt sich das Vorgehen als folgendes Schema darstellen:

Zusammengefasst als:

def eea(a, b):
	"""first variant of eea
	"""
	q = []
	a = [a, b]
	x = [1, 0]
	y = [0, 1]
	while a[-1] > 0:
		q = a[-2] // a [-1]
		a.append(a[-2] - q*a[-1])
		x.append(x[-2] - q*x[-1])
		y.append(y[-2] - q*y[-2])
	return a[-2], x[-2], y[-2]

Variante 2

Hier verzicht auf merken der Folgen .

def eea(a, b):
	"""second variant of eea
	"""
	x, y = 1, 0
	xx, yy = 0, 1
	while b > 0:
		q = a // b
		a, b = b, a - q*b # same as a % b
		x, xx = xx, x - q*xx
		y, yy = yy, y - q*yy
	return a, x, y