辗转相除法原理

辗转相除法原理:
假设有两个数x和y,存在一个最大公约数z=(x,y),即x和y都有公因数z,
那么x一定能被z整除,y也一定能被z整除,所以x和y的线性组合mx±ny也一定能被z整除。(m和n可取任意整数)
对于辗转相除法来说,思路就是:若x>y,设x/y=n余c,则x能表示成x=ny+c的形式,将ny移到左边就是x-ny=c,由于一般形式的mx±ny能被z整除,所以等号左边的x-ny(作为mx±ny的一个特例)就能被z整除,即x除y的余数c也能被z整除。
(以上为复制)

若不能整除,则将min{x,y}作为被除数,余数c作为除数,继续循环这个过程,直到余数c=0为止。为什么这样做可以得到结果?因为在这个过程中,被除数和除数最大公约数始终没有变。分析如下:

设商为f,假设第十一步得到了结果,循环过程:
x/y=f1…c1
y/c1=f2…c2
c1/c2=f3…c3
……
c8/c9=f10…c10
c9/c10=f11…0
如此,c10即为最大公约数。
那么据第一段所述,可得:c9%c10=0,c8%c10=0,c7%c10=0……c1%c10=0,据此可说明被除数和除数最大公约数始终没有变。于是这样就得到了最大公约数了。


备注:
两个整数的最大公约数等于其中较小的数和两数的差的最大公约数
最小公倍数等于两个数的乘积除以最小公约数
b能被a整除<=>b/a=c…0 (c为整数);
b能整除a<=>a/b=c’…0(c为整数).

//求两数的最大公约数
#include<stdio.h>
int main()
{
		int x,y,c;   
		scanf("%d %d,&x,&y");
		do
		{
				c=x%y;
				x=y;
				y=c;
        }while(c!=0);
		printf("%d",x)
		return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值