Показать сообщение отдельно
  #2  
Старый 27.04.2010, 22:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, можно порыть алгоритм в инете.
С другой стороны, могу подсказать некоторую эвристику.

1. НОД не может быть больше меньшего числа.
2. Нужно сравнивать отстатки от деления (д.б. = 0).

Код:
function FindNOD(A, B : Integer) : Integer;
begin
  Result := Min(A,B);
  While Result > 1 Do
      If ((A mod result) = 0) And ((B mod result) = 0)
         Then Break
         Else Dec(Result);
end;

PS. Для данного кода входные значения д.б. положительные. Для отрицательных поправь вычисление стартового числа (в Min числа взять Abs).
Ответить с цитированием