1package body Greatest_Common_Divisor
2is
3
4   procedure G_C_D(M, N: in Natural; G: out Natural)
5   is
6      C, D, R: Integer;
7   begin
8      C := M; D := N;
9      while D /= 0 loop
10         --# assert C >= 0 and D > 0 and Gcd(C, D) = Gcd(M, N);
11         R := C rem D;
12         C := D; D := R;
13      end loop;
14      G := C;
15   end G_C_D;
16
17end Greatest_Common_Divisor;
18