辗转相除法求最大公约数原理分析(附代码实现)

  • 前言
  • 解释
  • 原理分析
  • 代码
  • 结语

前言

辗转相除法用起来很简单,但是其原理却自己想不明白。于是乎看了几篇有关辗转相除法原理的分析,在这里自己写下自己的理解。

解释

欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)

即:两个数相除,若能除尽,则较小的那个数为最大公约数;若除不尽,则用余数替代掉较大的那个数,继续两个数相除、取余,直到能够除尽,此时较小的数即为最大公约数。

原理分析

首先设我们要求的两数分别为a、b(默认a>b),用gcd(a,b)表示a,b的最大公约数。

r = a (mod b) 即 r 为a除以b的余数(remainder)

q为a除以b的商(quotient),即 a÷b=q…r

辗转相除法就是要证明 a和b的最大公约数 和 b和r的最大公约数 相同;
即gcd(a,b)=gcd(b,r)。

前提:

a÷b=q…r。(a>b)

第一步:令c=gcd(a,b),即c为a和b的最大公约数,设

a=Ac,b=Bc

第二步:结合前提可知,余数r满足

r =a-qb
=Ac-qBc
=(A-qB)c

根据第二步结果可知:c也是r的约数 ,c既是a,b的最大公约数,也是rb公约数。如果我们能够证明c不仅是公约数,更是最大公约数,那么就能够证明辗转相除法gcd(a,b)=gcd(b,r)。

第三步:

已知:
r = (A-qB)c
b = Bc
现在r和b分别各有两个约数:(A-qB)和c 以及 B和c
c已经是公约数了,那如果我们能够证明(A-qB)与B互质的,就说明这两个因子中不再能够展开出其他公约数出来,那么r和b的最大公约数就是c。

第四步:证明(A-qB)与B互质(反证法)

我们假设(A-qB)与 B 存在公约数 d (d>1)
A-qB=xd
B=yd

由①式可得:A = qB+xd;
将 A 代回 a = Ac:
a = (qB+xd)c ,
再将 B= yd 代回:
a = (qyd+xd)c
a = (qy+x)dc
b = ydc
此时,a和b的最大公约数为dc,与我们最开始假定c为最大公约数的条件相矛盾,说明d不存在,
(A-qB)与 B 互质得证

(A-qB)与 B 互质 ,那么c也是r和b的最大公约数,gcd(a,b)=gcd(b,r) 得证。

代码

 int a,b;scanf("%d,%d",&a,&b);//保证a为较大的那个数if(a<b){int c=a;a = b;b = c;}//核心代码while((a%b)!=0){int r = a%b;a = b;b = r;}

结语

求最大公约数有很多个方法,更多方法可参考这里.

其中辗转相除法和更相减损法的原理比较类似,对更相减损法的原理分析可参考这里


如果这篇文章对你有帮助,请给我点个赞吧~

辗转相除法求最大公约数原理分析(附代码实现)相关推荐

  1. P30-P32:逻辑类型,保留小数的输出,辗转相除法求最大公约数

    ** P30-P32(逻辑类型,保留小数的输出,辗转相除法求最大公约数): ** boolean 代码作用如同上述代码中的isPrime,会用到boolean,将isPrime的int类型改为逻辑类型 ...

  2. html放大镜原理,Canvas实现放大镜效果完整案例分析(附代码)

    本文主要记录 canvas 在图像.文字处理.离屏技术和放大镜特效的实现过程中使用到的API.先看下效果吧: 一张模糊的图片: 鼠标点击任意位置,产生放大效果: 哇塞~ 一个帅哥,哈哈哈哈~ 1.放大 ...

  3. python辗转相除法求最大公约数最小公倍数_辗转相除法求最大公约数/最小公倍数...

    http://blog.csdn.net/jtujtujtu/article/details/4407171 2009 辗转相除法求最大公约数: 辗转相除法, 又名欧几里德算法(Euclidean a ...

  4. html中放大镜案列,Canvas实现放大镜效果完整案例分析(附代码)

    本文主要记录 canvas 在图像.文字处理.离屏技术和放大镜特效的实现过程中使用到的api.先看下效果吧: 一张模糊的图片: 鼠标点击任意位置,产生放大效果: 哇塞~ 一个帅哥,哈哈哈哈~ 1.放大 ...

  5. 利用辗转相除法——求最大公约数(详解)

    辗转相除法 求最大公约数: 给定两个数,求这两个数的最大公约数 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数.应用领域有数学和计算机两个方面.计算公式gcd(a,b) = g ...

  6. 多项式辗转相除法求最大公约数_辗转相除法求最大公约数

    辗转相除法求最大公约数 约数 如果数 a 能被数 b 整除,a 就叫做 b 的倍数,b 就叫做 a 的约数. 最大公约数 最大公约数就是两个数中,大家都能相约且最大的数. 辗转相除法 辗转相除法又名欧 ...

  7. c语言辗转相除法约分分数,更相损减法和辗转相除法 求最大公约数和最小公倍数(C语言)...

    假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m* ...

  8. leetcode----1447.最简分数(辗转相除法求最大公约数)

    1447.最简分数 问题:给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 .分数可以以 任意 顺序返回. 示例: 输入:n = 2 输出: ...

  9. 【SemiDrive源码分析】【MailBox核间通信】51 - DCF_IPCC_Property实现原理分析 及 代码实战

    [SemiDrive源码分析][MailBox核间通信]51 - DCF_IPCC_Property实现原理分析 及 代码实战 一.RTOS 侧 Property Service 初始化流程 1.1 ...

最新文章

  1. ubuntu samba重启 mount命令
  2. 给大家推荐一位我非常佩服的Python工程师 人生赢家
  3. 打通两台机器的ssh功能
  4. MATLAB插值问题
  5. 为Visual Studio 2010增加ExtJs智能提示
  6. python opencv 摄像头_python+opencv实现摄像头调用的方法
  7. shell高级脚本:“秒”转换为“时-分-秒”;ping
  8. POI上传Excel的小问题处理
  9. 用pyinstaller把python脚本编译成可执行程序(windows系统)
  10. AutoItLibrary
  11. ubuntu 下载 迅雷
  12. python实现单层单向RNN
  13. 用java根据年份判断生肖_怎样根据年份确定生肖
  14. 任正非:一个人对自己都不狠,哪来的战斗力?
  15. 杰奇小说系统百度地图生成插件
  16. 部分选主元matlab,部分选主元的Doolittle分解 | 学步园
  17. Win11图标变成白色文件如何解决?
  18. OKRs-E 让目标推进成功率提升200%
  19. LaTeX的入门使用(新手使用向)
  20. Java操作Excel之Excel文件的下载

热门文章

  1. 京东2019年春招题(前端)
  2. 树莓派系统剪裁、克隆
  3. anaconda环境安装搜不到的环境
  4. PTA L1-020 帅到没朋友 (20 分)(C++)
  5. 判定一棵二叉树是否是二叉搜索树
  6. Excel 2010 VBA 入门 093 数据处理之建立数组
  7. python 一些模块的应用
  8. Excel保护怎么解除保护
  9. Linux中su无法切换到目录,linux普通用户su root切换提示没有文件或目录的解决方法...
  10. 开启Fluter基础之旅二-------Future再论、常用组件、Material Design风格组件学习