Von
Cöster kommt der
Hinweis, dass obige Funktion Probleme mit zwei Sonderfällen hat:
Zitat von
Cöster:
b=0 würde wegen Division durch 0 zu einem Fehler führen.
Für b=1 würde die Funktion a als Ergebnis liefern (statt 1).
Als korrigierte Version, schlägt er folgende vor:
Delphi-Quellcode:
function ggT(A, B: Integer): Cardinal;
var
Rest: Integer;
begin
while B <> 0 do
begin
Rest := A mod B;
A := B;
B := Rest;
end;
Result := A;
end;
Darüberhinaus schlägt
marabu noch eine weitere, rekursive Variante vor:
Delphi-Quellcode:
function Gcd(n, m: Int64): Int64;
begin
if m = 0 then Result := n
else Result := Gcd(m, n mod m);
end;