Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как найти наибольший общий делитель?

01.01.2007
{  The greatest common factor, or GCF, is the greatest factor 
  that divides two numbers. 
} 
 
 
uses 
  math; 
 
// Find the greatest common factor of two integers 
 
function TForm1.GCF(A, B: Integer): Integer; 
var 
  Lfactor: Integer; 
begin 
  // Return -1 if either value is zero or negative 
  if (A < 1) or (B < 1) then  
  begin 
    Result := -1; 
    Exit; 
  end; 
  // if A = B then this is the GCF 
  if A = B then  
  begin 
    Result := A; 
    Exit; 
  end; 
  Result := 1; 
  for Lfactor := trunc(max(A, B) / 2) downto 2 do  
  begin 
    if (frac(A / Lfactor) = 0) and (frac(B / Lfactor) = 0) then  
    begin 
      Result := Lfactor; 
      Exit; // GCF has been found. No need to continue 
    end; 
  end; 
end; 
 
// Example: 
procedure TForm1.Button1Click(Sender: TObject); 
var 
 Res: Integer; 
begin 
  Res := GCF(120, 30); 
  ShowMessage(Inttostr(Res)); 
end; 
 
{******************} 
 
// Find the greatest common factor of an array of integers 
function TForm1.GCFarray(A: array of Integer): Integer; 
var 
  Llength, Lindex, Lfactor: Integer; 
begin 
  Llength := Length(A); 
 
  // Return -1 if any value is zero or negative 
  for Lindex := 0 to Llength - 1 do  
  begin 
    if A[Lindex] < 1 then  
    begin 
      Result := -1; 
      Exit; 
    end; 
  end; 
 
  // if all elements are equal then this is the GCF 
  Lindex := 1; 
  while (Lindex < Llength) and (A[Lindex] = A[0]) do Inc(Lindex); 
  if Lindex = Llength then  
  begin 
    Result := A[0]; 
    Exit; 
  end; 
 
  Result := 1; 
 
  for Lfactor := trunc(ArrayMax(A) / 2) downto 2 do  
  begin 
    Lindex := 0; 
    while (Lindex < Llength) and 
      (frac(A[Lindex] / Lfactor) = 0) do Inc(Lindex); 
    if Lindex = Llength then  
    begin 
      Result := Lfactor; 
      Exit; // GCF has been found. No need to continue 
    end; 
  end; 
end; 
 
// find the maximum value in an array of integers 
function TForm1.ArrayMax(Aarray: array of Integer): Integer; 
var 
  Lpos: Integer; 
begin 
  Result := 0; 
  for Lpos := 0 to Length(Aarray) - 1 do 
    if Aarray[Lpos] > Result then 
      Result := Aarray[Lpos]; 
end; 

Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php