辗转相除法

辗转相除

辗转相除法是一种递归算法。以k表示步骤数,算法的计算过程如下。每一步的输入是都是前两次计算的余数rk−1和rk−2。因为每一步计算出的余数都在不断减小,所以,rk−1<rk−2。在第k步中,算法计算出满足以下等式的商qk和余数 rk:
rk−2 = qk*rk−1 + rk
其中rk < rk−1。也就是rk−2要不断减去rk−1直到比rk−1小。
整个算法可以用如下等式表示:
r0 = q1r1 + r2
r1=q2r2+r3
r3=q3r3+r4
......
其中r2>r3>r4>.........>rn
经过n次处理后可得到rn+1=0,此时,rn为两数的最大公因数。
可简单表示为gcd(r0,r1)=rn。
可表示为:
gcd(r0,r1)=gcd(r0-r1,r1)=gcd(r0-q1r1,r1)=gcd(r2,r1)........=gcd(rn,rn-1)=rn;

在C语言中可通过如此方式实现应用

include<stdio.h>

int main()
{
int a,b;
int t;
scanf("%d %d",&a,&b );

while (b!=0){


	t=a%b;
	a=b;
	b=t;
}
printf("gcd=%d\n",a);
return 0;

}

posted @ 2025-11-05 23:53  KO01  阅读(11)  评论(0)    收藏  举报