一、辗转相除法

原理:

辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。

原理

设两数为a、b(b

第一步:令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)dc,b=nc=ycd,故a与b最大公约数成为cd,而非c,与前面结论矛盾】

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

证毕。

图示:

辗转相除法:以大数除以小数,如果能整除,那么小数就是所求的最大公约数(Greatest CommonDivisor:gcd)。否则就用余数来除刚才的除数;

再用这新除法的余数去除刚才的余数。依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数。即:gcd(x,y)表示x与y的

最大公约数,有gcd(x,y)=gcd(y,x%y),如此便可把原问题转化为求两个更小数的公约数,直到其中一个数为0,剩下的另外一个数就是两者的最

大公约数。

代码:

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include

8 using namespacestd;9 int gcd(int a,intb)10 {11 //不需要特判a与b的大小,如果a小于b,那么递归一次gcd两者就会交换值

12 return b?gcd(b,a%b):a;13 }14 intmain()15 {16 printf("%d\n",gcd(2,4));17 }

二、更相减损法

原理:

更相减损术是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。

《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”

翻译成现代语言如下:

第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。

第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。

则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。

其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。

图示:

此算法简单来说是:将a和b减, 得到的差值赋值给c,并判断是否为0,如果不为0,则将b赋值给a,将c赋值给a, 然后重复上述步骤直到c为0。a-b=c,算法直观来看就是这个数学算式的左移操作,和辗转相除法实现方式很是接近,应该本源思路是一样的。

代码:

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include

8 using namespacestd;9 int gcd(int a,intb)10 {11 int c = 0;12 if(a

15 {16 b =c;17 a>b ? c = a - b : c = b -a;18 a =b;19 } while (c != 0);20 returnb;21 }22 intmain()23 {24 printf("%d\n",gcd(2,4));25 }

三、穷举法

找到两个数中那个小的,然后从它开始for循环,如果有满足的就输出然后break,否则就让这个值减去一再进行判断

代码:

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include

8 using namespacestd;9 int gcd(int a,intb)10 {11 for(int i=min(a,b);i>=1;--i)12 {13 if(a%i==0 && b%i==0) returni;14 }15 }16 intmain()17 {18 printf("%d\n",gcd(2,4));19 }

最大公约数简便算法_三种求最大公约数的方法相关推荐

  1. 最大公约数简便算法_最大公约数的求法

    展开全部 质因数分解法:把每个数分别分解质因数,再把32313133353236313431303231363533e4b893e5b19e31333339666666各数中的全部公有质因数提取出来连 ...

  2. 最大公约数简便算法_求最大公约数的4种算法

    for(z=0; z<10000000; z++) 循环只是为了增加程序的运行时间, 让我们体会算法的时间复杂度. 算法一:短除法 想法,采用短除法找出2个数的所有公约数,将这些公因子相乘,结果 ...

  3. 最大公约数简便算法_求最大公约数的几种算法

    给定两个整数,求出这两个整数的最大公约数是我们从小就接触过的问题,但是我们如何用更简洁的算法来计算呢? 本文中,假定这两个整数是m和n且m>=n>=0.让我们从最简单的算法说起! 一.Co ...

  4. C语言中求最大公约数的算法(三种)

    利用指针把三个数从大到小输出 最大公约数:指某几个整数共有约数中最大的一个 方法一:相减法 也叫更相减损法 思路: 1.如果a > b a = a - b; 2.如果b > a b = b ...

  5. 用Matlab比较三种求序列相关的方法

    常规方法 用xcorr函数. 用filter函数 filter函数中,将分母设为1,则其结构就是乘累加,和相关一致.只不过这里要注意,求相关的时候,要将filter的系数b倒序. 用fft求序列相关 ...

  6. 三种求字符串长度的方法

    目录 第一种:使用库函数strlen() 第二种:使用指针 第三种:使用递归的方式 第一种:使用库函数strlen() #include <stdio.h> #include <st ...

  7. 水仙花数java_Java三种求水仙花数的方法

    水仙花数:水仙花数是三位数,它的各位数字的立方和等于这个三位数本身,例如:370=33+73+00:371=33+73+13,370.371就是一个水仙花数 注意:要判断一个三位数是不是水仙花数,得先 ...

  8. 提高sql性能的方法_三种提高T-SQL性能的方法

    提高sql性能的方法 介绍 (Introduction) When customers used to ask for advice to solve some T-SQL Problem, they ...

  9. java求约数_[转载]Java求最大公约数与最小公倍数

    (看到一份不错的总结,拿来收着) 如果数a能被数b整除,a就叫做b的倍数,b就叫做作a的约数.约数和倍数都表示一个数与另一个数的关系,不能单独存在.如只能说16是某数的倍数,2是某数的约数,而不能孤立 ...

  10. 四种求最大公约数的算法 C / C++

    文章目录 前言 一.辗转相除法 1. 算法简介 2. 算法描述 3. 代码及复杂度 二.穷举法(枚举法) 1. 算法简介 2. 算法描述 3. 代码及复杂度 三.更相减损法 1. 算法简介 2. 算法 ...

最新文章

  1. linux 9.0挂载驱动
  2. vc++实现avi文件的操作 用于视频解析及录制(转)
  3. PHP限制提交文章条数,限制WordPress文章页面修订版本(revision)数量
  4. 《运营之光》《策略产品经理》《推荐系统实践》读书笔记随笔
  5. Spring循环依赖源码剖析
  6. VB案例:计算圆锥体积与面积
  7. 使用值类型LazyString分析字符串
  8. 个人JS脚本验证大全[转]
  9. WIFI的下一代:LIFI 可见光无线通信代替微波通信
  10. vivo手机光环助手下载游戏怎么打不开_“点亮夜色,点亮你”——全新5G自拍手机,vivo S6系列正式发布...
  11. 红蜘蛛多媒体软件怎么停---超简单
  12. 三口烧瓶规格有哪些_三口烧瓶有哪些规格,用途是什么 | | 化工资讯网
  13. 无线通信与编码_MATLAB实现OFDM载波频偏估计_含仿真代码
  14. 使用esp32 作为蓝牙鼠标和键盘以及坑
  15. R语言导入数据文件 (Excel文件、csv文件导入R)
  16. combo box使用
  17. 零基础学习之万物皆可GAN学习路线
  18. SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
  19. 26个顶尖战略咨询公司常用分析模型详解!
  20. 用python 读取excel 指定列

热门文章

  1. 微信小程序 使用cookie
  2. Latex 插入的图片紧跟当前文字
  3. systemverilog之覆盖率
  4. 传感技术复习笔记(9)——光电式传感器
  5. 微信小程序getUserInfo返回拼音的解决办法
  6. Win11电脑蓝屏怎么办?Win11电脑蓝屏的修复方法
  7. thinkphp5 layui分页样式
  8. 转行测试,11k入职,我写了份1000多字的分享,每一笔都是经历
  9. 年轻人,你为什么要来阿里搞技术?
  10. python处理FITS 3:处理头文件和数据单元