辗转相除法求最大公约数原理分析(附代码实现)
辗转相除法求最大公约数原理分析(附代码实现)
- 前言
- 解释
- 原理分析
- 代码
- 结语
前言
辗转相除法用起来很简单,但是其原理却自己想不明白。于是乎看了几篇有关辗转相除法原理的分析,在这里自己写下自己的理解。
解释
欧几里得算法又称辗转相除法,是指用于计算两个非负整数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的最大公约数,也是r和b的公约数。如果我们能够证明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;}
结语
求最大公约数有很多个方法,更多方法可参考这里.
其中辗转相除法和更相减损法的原理比较类似,对更相减损法的原理分析可参考这里
如果这篇文章对你有帮助,请给我点个赞吧~
辗转相除法求最大公约数原理分析(附代码实现)相关推荐
- P30-P32:逻辑类型,保留小数的输出,辗转相除法求最大公约数
** P30-P32(逻辑类型,保留小数的输出,辗转相除法求最大公约数): ** boolean 代码作用如同上述代码中的isPrime,会用到boolean,将isPrime的int类型改为逻辑类型 ...
- html放大镜原理,Canvas实现放大镜效果完整案例分析(附代码)
本文主要记录 canvas 在图像.文字处理.离屏技术和放大镜特效的实现过程中使用到的API.先看下效果吧: 一张模糊的图片: 鼠标点击任意位置,产生放大效果: 哇塞~ 一个帅哥,哈哈哈哈~ 1.放大 ...
- python辗转相除法求最大公约数最小公倍数_辗转相除法求最大公约数/最小公倍数...
http://blog.csdn.net/jtujtujtu/article/details/4407171 2009 辗转相除法求最大公约数: 辗转相除法, 又名欧几里德算法(Euclidean a ...
- html中放大镜案列,Canvas实现放大镜效果完整案例分析(附代码)
本文主要记录 canvas 在图像.文字处理.离屏技术和放大镜特效的实现过程中使用到的api.先看下效果吧: 一张模糊的图片: 鼠标点击任意位置,产生放大效果: 哇塞~ 一个帅哥,哈哈哈哈~ 1.放大 ...
- 利用辗转相除法——求最大公约数(详解)
辗转相除法 求最大公约数: 给定两个数,求这两个数的最大公约数 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数.应用领域有数学和计算机两个方面.计算公式gcd(a,b) = g ...
- 多项式辗转相除法求最大公约数_辗转相除法求最大公约数
辗转相除法求最大公约数 约数 如果数 a 能被数 b 整除,a 就叫做 b 的倍数,b 就叫做 a 的约数. 最大公约数 最大公约数就是两个数中,大家都能相约且最大的数. 辗转相除法 辗转相除法又名欧 ...
- c语言辗转相除法约分分数,更相损减法和辗转相除法 求最大公约数和最小公倍数(C语言)...
假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m* ...
- leetcode----1447.最简分数(辗转相除法求最大公约数)
1447.最简分数 问题:给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 .分数可以以 任意 顺序返回. 示例: 输入:n = 2 输出: ...
- 【SemiDrive源码分析】【MailBox核间通信】51 - DCF_IPCC_Property实现原理分析 及 代码实战
[SemiDrive源码分析][MailBox核间通信]51 - DCF_IPCC_Property实现原理分析 及 代码实战 一.RTOS 侧 Property Service 初始化流程 1.1 ...
最新文章
- ubuntu samba重启 mount命令
- 给大家推荐一位我非常佩服的Python工程师 人生赢家
- 打通两台机器的ssh功能
- MATLAB插值问题
- 为Visual Studio 2010增加ExtJs智能提示
- python opencv 摄像头_python+opencv实现摄像头调用的方法
- shell高级脚本:“秒”转换为“时-分-秒”;ping
- POI上传Excel的小问题处理
- 用pyinstaller把python脚本编译成可执行程序(windows系统)
- AutoItLibrary
- ubuntu 下载 迅雷
- python实现单层单向RNN
- 用java根据年份判断生肖_怎样根据年份确定生肖
- 任正非:一个人对自己都不狠,哪来的战斗力?
- 杰奇小说系统百度地图生成插件
- 部分选主元matlab,部分选主元的Doolittle分解 | 学步园
- Win11图标变成白色文件如何解决?
- OKRs-E 让目标推进成功率提升200%
- LaTeX的入门使用(新手使用向)
- Java操作Excel之Excel文件的下载
热门文章
- 京东2019年春招题(前端)
- 树莓派系统剪裁、克隆
- anaconda环境安装搜不到的环境
- PTA L1-020 帅到没朋友 (20 分)(C++)
- 判定一棵二叉树是否是二叉搜索树
- Excel 2010 VBA 入门 093 数据处理之建立数组
- python 一些模块的应用
- Excel保护怎么解除保护
- Linux中su无法切换到目录,linux普通用户su root切换提示没有文件或目录的解决方法...
- 开启Fluter基础之旅二-------Future再论、常用组件、Material Design风格组件学习