Eingabe: natürliche Zahlen a, b.
// Vorbedingung: a = A und b = B
nat c = 1, nat d = 0; nat e = 0; nat f = 1;
// Invariante: ggt(a,b) = ggt(A,B)
// und A*c + B*d = a und A*e + B*f = b
while (a ungleich b) {
if (a > b) {
...
} else {
...
} }
// Nachbedingung: A*c + B*d = ggt(A,B)
Ausgabe: c, d