谁给我解释下 用辗转相除法求最大公约数(pascal)

来源:百度知道 编辑:UC知道 时间:2024/05/17 07:43:57
repeat
r:=a mod b;
a:=b;
b:=r
until r=0

解释一下这个算法的原理吧:
已知m>n,设:
m=n*k+r(0<=r<=n)
说明:
m是n的k0倍还多r ,那么m和n的最大公约数与n和r的最大公约数相同。若r=0,则n就是m和n的最大公约数;若r不等于0,则对n和r重复上述过程,直到r=0为止。

var a,b,c:integer;
t:integer;
begin
writeln('输入两个数↓');
write('输入第一个数:'); readln(a); {假设a=84}
write('输入第二个数:'); readln(b); {假设b=30}
if b>a then begin t:=a; a:=b; b:=t; end;
repeat
c:=a mod b;
a:=b;
b:=c;
until c=0;
write('最大公因数是',a,'。');
readln;
end.