Greatest Common Divisor in Pascal

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.

Comments

comments powered by Disqus