前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GCD最大公约数——辗转相除法实现

GCD最大公约数——辗转相除法实现

作者头像
太阳影的社区
发布2022-05-09 15:19:04
9280
发布2022-05-09 15:19:04
举报
文章被收录于专栏:太阳影的学习记录

一个比较简单的算法,这里记录一下相关笔记。

最大公约数是指能够整除多个整数的最大正整数(这里面多个整数不能都为0)例如6和4的最大公约数就是2,13和3的最大公约数是1。

算法实现

平时用的时候如果是C++,那么std库里面就已经有这个函数了,直接调用就行。具体可以看std::gcd的用法。比较常见的实现方式是:

代码语言:javascript
复制
int gcd(int x, int y) {
    return y == 0 ? x : gcd(y, x % y);
}

这里采用的是辗转相除法,两数相除取余数和除数继续相除,直到余数为0,这时前一个余数就是最大公约数。举个例子:

252和105,求最大公约数:首先第一步,252 \mod 105 = 147 。下一步要用余数和除数继续相除,因为147 > 105 所以147 在下一步要继续当被除数。第二步,147 \mod 105 = 42 ,得到余数42,因为42 小于105 ,所以下一步需要105 当被除数,42 当除数。第三步,105 \mod 42 = 21 ,得到余数\(21\)。42 \mod 21 = 0 最后一步,,取上一步的余数21 ,就是最大公约数。

这里解释一下,实际上y充当的是求余之后的结果,当求余结果等于0的时候那么说明已经不需要继续递归下去了,直接取上一次求余的结果,就可以得到最大公约数,而刚好x存放的就是上一次传入的y(此时假设已经在递归中),即x%y,上一次求余的结果,因此在当前y为0时应当返回x

参考资料

  1. C++ 中的 std::gcd 函数
  2. 辗转相除法
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法实现
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档