更相减损法原理

假设有两个数161和63,我们要求这两个数的最大公因数,不妨假定这个最大公因数为m,我们可以将较大的数161看成63+98,63与98的和161可以被m整除,其中63也可以被m整除,自然98可以被m整除;

所以这个问题就转换为求98和63的最大公因数m(和上面m相等)
将98看成63+35,其中63可以被m整除,和98也能被m整除,故35也可以被m整除;

所以问题进一步转换为求35和63的最大公因数m(和上面m相等)
同理转换为求 (63-35)=>28和35 的最大公因数然后转换为求28和7的最大公因数…(一直减呀减)

后来转换为求7和7的最大公因数
最后转换为求7和0的最大公因数
输出第一个数字即可;这就是相减损术的原理

#include<stdio.h>
main()
{   int a,b,num1,num2;printf("请输入这两个数:");scanf("%d %d",&a,&b);num1=a,num2=b;while(a!=b)/* a, b不相等,大数减小数,直到相等为止。*/ {if(a>b)a-=b;elseb-=a;}//a==b结束循环,根据更相减损术,若a==b,则a(或b)即为两数的最大公约数。printf("a、b的最大公约数为:%d\n",a);printf("a、b的最小公倍数为:%d",num1*num2/a);//最小公倍数=两整数的乘积÷最大公约数
}

辗转相除法原理

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

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

或者更加简洁的写法有

int gcd(int a,int b){return !b?a:gcd(b,a%b);
}

求最大公约数:更相减损法和辗转相除法相关推荐

  1. 更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数

    更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数 标签(空格分隔): 算法 算法竞赛 这两种算法平时经常听到,听起来也很装逼,但是我老是忘了他们的原理,今天好好想想,写下来. 更相减损法 更相 ...

  2. 更相减损法和辗转相除法求最大公约数

    辗转相除法 原理 1.a和b的最大公因数也是b和r的最大公因数.其中,r是a除以b的余数 证明 计算过程 40和15的最大公约数 40➗15 = 2-10 15➗10 = 1-5 10➗ 5 = 2- ...

  3. 求最大公约数(更相减损术)

    更相减损术:可半者半之,不可半者,副置分母.子之数,以少减多,更相减损,求其等也.以等数约之. 使用步骤: 第一步:任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若不是则执行第二步.(可 ...

  4. C++ 求最大公约数 更相减损法 欧几里得算法 暴力穷举法

    两个数的最大公约数是指能同时被他们整除的最大正整数. 两个数的最大公约数等于它们中 较小的数 和 两数之差 的最大公约数. 252和105的最大公约数是21(252 = 21 × 12:105 = 2 ...

  5. C语言:求最大公约数-更相减损法(循环自定义函数的定义与调用)

    又是王老师的一道练习题: 任务描述 1.任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若不是则执行第二步: 2.以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数.继续这 ...

  6. 求最大公约数(更相减损术辗转相除法)

    求解最大公约数的多种Way: 1 暴力解决法:M不断自减找到最大公约数. 2 辗转相除法:反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数. 3 更相减损术:若两者都为偶数,进行折半,直到 ...

  7. 求最大公约数和最小公倍数(更相减损法/辗转相除法)

    目录 一.最大公约数 1.1 更相减损法 1.2 辗转相除法 二.最小公倍数 2.1 最小公倍数=两数相乘/最大公约数 2.2 用较小数的倍数除以较大数 一.最大公约数 1.1 更相减损法 原理如下图 ...

  8. c语言最大公约数更相减损法,【C语言】最大公约数(更相减损法)和(辗转相除法)...

    #include #include /* 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数. 例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , ...

  9. 更相减损术——Java实现

    Java作业--求最大公约数--更相减损术 虽然算法简单,但是因为很不熟练,所以一开始的代码有较多错误,以下是经过多次修改后的代码. 代码: import java.util.Scanner;publ ...

最新文章

  1. Angular4.0从入门到实战打造在线竞拍网站学习笔记之四--数据绑定管道
  2. python【力扣LeetCode算法题库】695- 岛屿的最大面积(深搜)
  3. XLNet再次超越BERT,技术发展太快,如何才能跟得上节奏?
  4. 解密多媒体封装解封装框架
  5. python中long类型_浅谈python 四种数值类型(int,long,float,complex)
  6. c++面向对象高级编程 学习十七 const, new, delete
  7. IOC操作Bean管理XML方式(注入外部bean)
  8. Node.js:模块查找,引用及缓存机制
  9. Springboot2 搭建 高性能Websocket服务器
  10. 微课|中学生可以这样学Python(例4.2):打印九九乘法表
  11. System.Net.Http.Formatting的nuget版本冲突问题
  12. 稚晖君教你制作全球最迷你的自平衡机器人
  13. 菲尼克斯FL SWITCH SFN 16TX多端口交换机
  14. 全球与中国高炉系统(钢铁厂)市场深度研究分析报告
  15. spack Bootstrapping Mirrors
  16. 转载:通信里 星座图 到底是什么
  17. markdown如何调整行距_反Markdown试验:用Markdown的思维来使用Word
  18. 关于计算机在教室的文化建设方案,大学教室文化建设方案
  19. Go语言:模拟鼠标操作(go-vgo/robotgo)
  20. 计算机网络—自顶向下 计算机网络和因特网

热门文章

  1. 使用HBuilder制作一个简单的HTML5网页
  2. PLC中X和Y代表什么
  3. linux安装tldr
  4. 文件夹打开方式被修改后的处理办法【转载】
  5. MySQL用户权限总结【用户授权必会】
  6. word文档如何重新另起序号/继续编号
  7. Linux sysrq使用
  8. jquery获取点击按钮的id
  9. YOLOv5中FPS计算
  10. chromeF12 谷歌开发者工具详解(转载)