请大家帮忙看一下这个pascl程序对不对。

来源:百度知道 编辑:UC知道 时间:2024/06/06 01:48:47
我同学编的,求最大公约数。

program zwj;
var a,b,c,m,n,t,s:integer;
begin
readln(a,b);
m:=a;
n:=b;
s:=1;
repeat
if (m mod 2=0) and (n mod 2=0) then begin
m:=m div 2; n:=n div 2; s:=s*2; end;
until (m mod 2=1) or (n mod 2=1);
repeat
if m=n then c:=m;
if m>n then c:=m-n;
if m<n then begin c:=n-m; t:=m; m:=n; n:=t; end;
if c>n then m:=c;
if c<n then begin m:=n; n:=c c:=m; end;
until c=n;
c:=c*s;
writeln('(',a,',',b,')=',c);
end.

看看对不对。能不能改进。
我知道更简单的方法。
他是故意写成这种比较麻烦的,我只想知道他的方法对不对。

var a,b,i,j:longint;
begin
read(a,b);
if a<b then begin i:=b; b:=a; a:=b; end;
while (a<>0) and (a<>1) do
begin
a:=a-b;
if a<b then begin
i:=b;b:=a;a:=b;
end;

end;
writeln(b);
end;

显然是对的
他的第一步操作是进行变成奇数的修改
后面是找两个奇数的最大公约数