Паскаль, задача из контестера, алгоритм евклида

паскаль, задача из контестера, алгоритм евклида
задача -

Наибольшим общим делителем (НОД) для двух целых чисел m и n называется наибольший из их общих делителей. Например, для чисел 70 и 105 наибольший общий делитель равен 35.
С давних времен известен следующий алгоритм нахождения наибольшего общего делителя двух неотрицательных целых чисел: пока оба числа строго положительны надо из большего числа вычесть меньшее. Результатом работы (наибольшим общим делителем) является большее число после окончания описанной серии вычитаний или 0, если оба числа в конце равны 0.
Вам заданы целые неотрицательные a и b (0 ≤ a,b ≤ 10^7). Напишите программу, которая выведет количество вычитаний при работе такого алгоритма и результат его работы.

Входные данные
Единственная строка входных данных содержит записанные через пробел целые числа a, b (0 ≤ a,b ≤ 107).

Выходные данные
Выведите количество вычитаний в ходе работы алгоритма и его результат через пробел.

Контестер выдаёт ошибку на 13 тестах из 20.
Как написать правильный код?

вот мой изначальный говнокод -

var M, N, k, max, min: integer;
begin
readln(M, N); k:= 0; min:= -1; max:=10000001;
if ((n>min) and (n< max) and (m>min) and (m 0 do
begin
if M>N
then M:=M-N
else N:=N-M;
k:= k+1; end;
if m>n then write(k, ' ' , M);
if m

  • Код на pastebin.com, пожалуйста.
  • попробуй эту программу и переделай под свою задачу
    {Нахождение НОД }
    var a,b: integer;
    begin
    write('Ввести 2 целых числа --> ');
    readln(a,b);
    while a*b > 0 do
    if a >= b then a:= a mod b else b:= b mod a;
    write(a+b);
    readln;
    end.