求最大公约数 (欧几里德算法 也就是 辗转相除法)
已知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.


浙公网安备 33010602011771号