求最大公约数方法——辗转相除法

本文介绍了一种高效求解两个整数最大公约数的方法——辗转相除法,并通过实例详细解释了该方法的具体步骤及原理。

今天在写一道题目的时候需要求最大公约数,我之前找最大公约数的方法是短除法,但用代码好像不太容易实现,又发现了辗转相除法,看了好多帖子感觉不太好理解,看到了一位作者的“分块”的思想,感觉很妙,希望对大家有帮助。

首先介绍一下什么是辗转相除法

简单来说就是如果要找x和y的公约数,就先用比较大的那个数除以比较小的数(这里假设x>y)。

先用x除以y,得到的余数是z。

如果z=0,那么y就是x和y的最小公约数。如果z≠0,就将y的值赋给x,将z的值赋给y,

然后重复第一步的操作,再用y除以x,如果z=0,那么y是最小公约数,如果z≠0,就再重复以上操作,直至z=0,此时的x就是x和y的公约数

举个例子,假设x=16 y=12

先用x除以y,如果得到的余数为0,那么y就是x和y的最大公约数,这个非常好理解。这里得到的余数是4,x可以写为12+4。

我们要求的最大公约数就可以看成是找12+4和12的最大公约数,我们要把它们拆成很多个部分,最大公约数就是其中最大的部分,分块的方法就是用大的部分去除以小的部分,现在,要去看12是否可以再拆出来4这么大的部分,所以用12去除以4,得到的余数为0,此时的4就是x和y的最大公约数。x和y被拆分为4+4+4+4和4+4+4。

如果此时得到的余数不是0,就要继续去拆分,直到余数为0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值