辗转相除法

辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求两个正整数之最大公约数的算法。它是已知最古老的算法, 其可追溯至公元前300年前。

它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

另一种求两数的最大公约数的方法是更相减损法。


来源

  • 设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得a÷b=q…r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得b÷r1=q…r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除以r2,如此下去,直到能整除为止。其最后一个为被除数的余数的除数即为(a, b)。

  • 例如:a=25,b=15,a%b=10,b%10=5,10%5=0,最后一个为被除数余数的除数就是5,5就是所求最大公约数。


原理

设两数为a、b(a>b),用gcd(a,b)表示a,b的最大公约数,r=a (mod b) 为a除以b的余数,k为a除以b的商,即a÷b=kr。辗转相除法即是要证明gcd(a,b)=gcd(b,r)。

第一步:令c=gcd(a,b),则设a=mc,b=nc

第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c

第三步:根据第二步结果可知c也是r的因数

第四步:可以断定m-kn与n互质(假设m-kn=xd,n=yd (d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)cd,b=nc=ycd,则a与b的一个公约数cd>c,故c非a与b的最大公约数,与前面结论矛盾),因此c也是b与r的最大公约数。

从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。

证毕。

以上步骤的操作是建立在刚开始时r≠0的基础之上的。即m与n亦互质。


AC

  • c++
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int gcd(int m,int n) {int r;r=m%n;if(r==0)return n;return gcd(n,r);
}
int main() {int m,n;cout<<"请输入2个整数:"<<endl;cin>>m>>n;cout<<m<<","<<n<<"最大公约数为:"<<gcd(m,n)<<endl;return 0;
}

递归实现求最大公约数相关推荐

  1. PTA——递归法求最大公约数

    个人名片: 博主:酒徒ᝰ. 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来. 专栏:PTA习题及解析 介绍:记录了博主在pta学习练题的一些方法与笔记. 目录 前言 1.简介 2.优点 一.题目 ...

  2. 使用递归法求最大公约数

    int zuixiaogongyueshu(int a, int b) {if (a % b == 0) {return b;}else {return zuixiaogongyueshu(b, a ...

  3. 用递归法求最大公约数(递归)

    题目描述: 输入两个自然数a.b(a,b均在int范围内),用递归算法求a与b的最大公约数. 输入格式: 一行a与b,两数以一个空格隔开. 输出格式: 一个最大公约数. 样例输入: 20 15 样例输 ...

  4. 最小公倍数递归c语言,递归法求最大公约数和最小公倍数的实现代码

    #include using namespace std; int gcd(int a, int b);//声明最大公约数函数 int main() { int num1 = 1; int num2 ...

  5. 求最大公约数的4种算法(C++)

    求最大公约数的4种算法(C++) 一.实验目的 1.计算两个正整数的最大公约数和最小公倍数,并进行程序的调式与测试. 2.理解四种不同的求最大公约数的方法,学习其思维模式. 3.了解算法的概念.对问题 ...

  6. python学习——如何求最大公约数

    参考: https://www.cnblogs.com/yxym2016/p/12969067.html https://blog.csdn.net/weixin_43846904/article/d ...

  7. 牛客网递归错题:递归、欧几里得求最大公约数的时间复杂度、线性递归与尾递归实例区别

    很久找不到学习的平衡点,似乎有目的性的去解决问题寻求方法获得知识会比直接吸取知识要有趣,更印象深刻,这些都是我爬过的坑,以此铭记在心. 1. 队列在程序调用时必不可少,因此递归离不开队列.× 递归是栈 ...

  8. 2.2基本算法之递归和自调用函数_7592 求最大公约数问题

    http://noi.openjudge.cn/ch0202/7592/ /* 2.2基本算法之递归和自调用函数_7592 求最大公约数问题 http://noi.openjudge.cn/ch020 ...

  9. 欧几里得求最大公约数--JAVA递归实现

    欧几里得算法求最大公约数算法思想: 求p和q的最大公约数,如果q=0,最大公约数就是p:否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数. java实现代码: 1 public clas ...

最新文章

  1. 刘忠范院士:新型研发机构建设成了口号
  2. 源码编译安装nginx1.4.7
  3. oracle 迁移用户信息,Oracle备份一个用户并迁移
  4. 为了OFFER | 腾讯2020校招后端《解压字符串》
  5. 【Android 界面效果10】Android中View,ViewGroup,Window之间的关系
  6. Linux版本_linux版本信息解析
  7. 精通SpringBoot---整合RabbitMQ消息队列
  8. [Luogu 1197] JSOI2008 星球大战
  9. [2018.10.20 T2] 面包
  10. oracle10g最快安装教程,史上最详细Oracle 10g安装教程
  11. 计算机专业英语课后题答案高等教育,模拟试题1参考答案_计算机专业英语_doc_大学课件预览_高等教育资讯网...
  12. 15个提高编程技巧的 JavaScript工具
  13. L1-039 古风排版 (20 分)(二维数组)
  14. 用Python分析1585家电商车厘子销售数据,发现这些秘密
  15. Java自学经验分享
  16. Java 扫描微信公众号二维码,关注并自动登录网站
  17. 待过猫厂、狗厂、鹅厂、猪厂的10年测试码农告诉你-测试计划与测试方案的区别?
  18. 在线查看word,excel,pdf文件解决
  19. 40-50岁的男人喜欢什么样的女人呢?
  20. excel手机版_微软开发于手机端的办公软件!

热门文章

  1. 模型评价方法及代码实现
  2. 使用 @Transactional
  3. 在ubuntu下烧写映像文件到SD卡--基于三星210开发板
  4. 巴菲特称阿贝尔将是接班人;薄睿拓将卸任百威英博CEO邓明潇接任 | 高管变动2021年5月3日-9日...
  5. Selenium一些特殊情况的处理:失去焦点、点击不生效、长页面处理、先触发事件才能动态加载的元素、日期输入
  6. 数据结构课设_网页形式的景区导游
  7. 装机必备软件之后端开发篇
  8. 输入一行字符(输入以字符#结束),分别统计其中字母和数字字符的个数。
  9. 红米Note通过卡刷获取root权限教程,附各版本root包
  10. osgEarth示例分析——osgearth_skyview