A short iterational algorithm for calculating the greatest common divisor using the Euclidean algorithm.
function gcd(a, b:Longword):Longword; var t:Longword; begin while b <> 0 do begin t := b; b := a mod b; a := t; end; gcd := a; end;
This function can be used for calculating Euler's Totient function:
function fi(a:Longword):Longword; var i:Longword; count:Longword; begin if a = 1 then begin count := 1; Exit end; count := 0; for i := 1 to a do begin if gcd(i, a) = 1 then count := count +1; end; fi := count; end;
N.B. Keep in mind that this algorithms are far from optimal.