求最大公约数 (欧几里德算法 也就是 辗转相除法)

已知X,Y,Z三个正整数,使用两种不同的程序设计方法求他们的最大公约数 (欧几里德算法 也就是 辗转相除法)
program ex5_1;
var
    x, y, z, i : integer;
begin
        write('Please enter three positive integers: ');
     readln(x, y, z);
     i := x;
        repeat
         if  (x mod i = 0 ) and (y mod i = 0) and (z mod i = 0) then break;
         i := i-1;
        until i <= 1;
        writeln('The greatest common divisor is ', i);
        readln;
end.

========================================================

program ex5_2;
uses Math;
var
    x, y, z, i : integer;
begin
        write('Please enter three positive integers: ');
     readln(x, y, z);
     i := min(min(x, y), z);
        repeat
         if  (x mod i = 0 ) and (y mod i = 0) and (z mod i = 0) then break;
         i := i-1;
        until i <= 1;
        writeln('The greatest common divisor is ', i);
        readln;
end.

========================================================

program ex5_3;
uses Math;
var
     x, y, z, m, i, sq, temp, temp2 : integer;
begin
    write('Please enter three positive integers: ');
    readln(x, y, z);
    m := min(min(x, y), z);
    sq := round(sqrt(m));
    repeat
        i := i+1;
        if m mod i = 0 then
        begin
             temp := m div i;
             if (x mod temp = 0 ) and (y mod temp = 0) and (z mod temp = 0) then break;
             if (x mod i = 0 ) and (y mod i = 0) and (z mod i = 0) then temp2 := i;
        end;
    until i >= sq;
    if (x mod temp = 0 ) and (y mod temp = 0) and (z mod temp = 0) then
       writeln('The greatest common divisor is ', temp)
    else
       writeln('The greatest common divisor is ', temp2);
    readln;
end.

========================================================

program ex5_4;
var
    x, y, z : integer;

function gcd(x, y : integer) : integer;
var
    t : integer;
begin
        repeat
          t := x mod y;
          x := y;
          y := t;
        until t <= 0;
        gcd := x;
end;

begin
        write('Please enter three positive integers: ');
     readln(x, y, z);
        writeln('The greatest common divisor is ', gcd(gcd(x, y), z));
        readln;
end.

posted @ 2010-01-01 20:31  SmartIOI  阅读(162)  评论(0)    收藏  举报
本站采用CC授权如需转载、引用文章,请务必附上作者及来源处。 Creative Commons License