欧几里得算法

最大公约数

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个,a,b的最大公约数记为(a,b)。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。常用的是辗转相除法,也叫欧几里得算法

其计算原理依赖于下面的定理:

定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(Greatest Common Divisor)缩写为GCD
gcd(a, b) = gcd(b, a mod b)

证明:gcd(a, b) = gcd(b, a%b)

  • 假设a, b的最大公约数为z

{a=z⋅mb=z⋅n\left\{ \begin{array}{c} a = z \cdot m\\ b = z \cdot n \end{array} \right. {a=z⋅mb=z⋅n​

  • z为a,b的最大公约数,gcd(a, b) = z;且有m与n互质,否则z不为a,b的最大公约数
  • ab=p⋯r\frac{a}{b} = p \cdots rba​=p⋯r
  • →a=bp+r\rightarrow a = bp + r→a=bp+r
  • →zm=znp+r\rightarrow zm = znp + r→zm=znp+r
  • →z(m−np)=r\rightarrow z(m - np) = r→z(m−np)=r
  • 而 b=z⋅nb = z \cdot nb=z⋅n ⟶z⋅n=b\longrightarrow z \cdot n = b⟶z⋅n=b

{z(m−np)=rz⋅n=b\left\{ \begin{array}{c} z(m - np) = r \\ z \cdot n = b \end{array} \right. {z(m−np)=rz⋅n=b​

  • 要证 gcd(a, b) = gcd(b, a%b)
  • 即证 b 与 a % b 的最大公约数也是z
  • 即证 n 与 (m - np) 互质
  • 利用反证法,假设 n 与 (m - np) 不互质,所以它们的最大公约数不为1,设为 k

{m−np=km′n=kn′\left\{ \begin{array}{c} m - np = km' \\ n = kn' \end{array} \right. {m−np=km′n=kn′​

⇓\Downarrow ⇓

m−kn′p=km′→m=k(m′+n′p)m - kn'p = km' \\ \rightarrow m = k(m' + n'p) m−kn′p=km′→m=k(m′+n′p)

{m=k(m′+n′p)n=kn′\left\{ \begin{array}{c} m = k(m' + n'p) \\ n = kn' \end{array} \right. {m=k(m′+n′p)n=kn′​

  • 已知

{a=z⋅mb=z⋅n\left\{ \begin{array}{c} a = z \cdot m \\ b = z \cdot n \end{array} \right. {a=z⋅mb=z⋅n​

  • 代入得

{a=zk(m′+n′p)b=zk(n′)\left\{ \begin{array}{c} a = zk(m' + n'p) \\ b = zk(n') \end{array} \right. {a=zk(m′+n′p)b=zk(n′)​

  • 由假设得到 a,b 最大公约数 zk,与条件不符,所以**(m - np) 与 n 互质**
  • 所以 b 与 a % b 的最大公约数也是z
  • 所以 gcd(a, b) = gcd(b, a%b)

求解最大公约数的代码

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

最小公倍数

两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数,整数a,b的最小公倍数记为[a,b]

关于最小公倍数与最大公约数,我们有这样的定理:(a, b) x [a, b] = ab

最小公倍数的求解是在最大公约数的基础上进行的,当得到 a 和 b 的最大公约数 z 后,可以得到 a 和 b 的最小公倍数是 (ab / z),由于 ab 在实际计算中有可能溢出,因此更恰当的写法是 (a / z * b) 。由于 z 是 a 和 b 的最大公约数,所以 a / z 一定可以整除

欧几里得算法求最大公约数,最小公倍数相关推荐

  1. 辗转相除法(欧几里得算法)求 最大公约数与最小公倍数+推论与证明。

    首先我们规定:0不参与公约数和公倍数的讨论 先来讨论最大公约数: 最大公约数求法:两个数的所有公共质数相乘. 考虑三个问题. 为什么是公共的:公共代表这个数可以被两个数都整除 为什么是质数:合数一定能 ...

  2. 离散数学/初等数论:用“质因子分解法”和“欧几里得算法”求最大公约数gcd;“质因子分解法”和“最简算法”求最小公倍数lcm;以及对“意义”的一些看法。

    需要在开头提前说明,本篇文章仅仅用于在学习初等数论或者离散数学时候对算术基本定理的理解,实际应用的时候把结论告诉大家,想求最大公约数就用欧几里得算法是最简单的,在本篇不再赘述,有机会我会在其他文章中说 ...

  3. 欧几里得算法求最大公约数、最大公倍数

    欧几里得算法求最大公约数.最大公倍数 最大公约数(Greatest Common Divisor, GCD),是指2个或N个整数共有约数中最大的一个.a,b的最大公约数记为(a, b).相对应的是最小 ...

  4. 用欧几里得算法求最大公约数_欧几里得算法:GCD(最大公约数),用C ++和Java示例解释...

    用欧几里得算法求最大公约数 For this topic you must know about Greatest Common Divisor (GCD) and the MOD operation ...

  5. C语言:欧几里得算法求最大公约数

    文章目录 欧几里得算法 C语言:欧几里得算法求最大公约数 C语言:穷举法 欧几里得算法 举个例子说明欧几里得算法. 如图所示,用正方形地板砖,把这一块粉红色空地(长为xxx,宽为yyy,x>yx ...

  6. 欧几里得算法求最大公约数python,算法:欧几里得求最大公约数(python版)

    #欧几里得求最大公约数 #!/usr/bin/env python #coding -*- utf:8 -*- #iteration def gcd(a,b): if b==0: return a e ...

  7. 欧几里得算法求最大公约数之惊掉下巴的代码简化(纯C语言)

    欧几里得算法求最大公约数也叫辗转相除法. 证明 有两个数a,b,且a = kb + r(a,b,k,r皆为正整数,且r<b) 假设d为a,b的一个公约数 而r = a - kb,两边同时除以d, ...

  8. 欧几里得算法求两个正整数的最大公约数

    此题可以使用暴力破解法解决,但是效率不高. 欧几里德算法又称辗转相除法,其计算原理依赖于下面的定理: gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)   ...

  9. 欧几里得算法求m,n(非负整数)的最大公约数,记为gcd(m,n);java版

    基础知识:最大公约数:自行百度: 欧几里得-最大公约数算法: gcd(m,n) = gcd(n,m mod n)  (m mod n 表示:m除以n后的余数) 重复此步骤,知道 m mod n等于0: ...

  10. c语言用质因数分解法求最大公约数,分解质因数法求最大公约数(javascrip实现)

    //判断是否为质数------------------------------------------------------ function isPrime(n) { for (var i = n ...

最新文章

  1. python源码精要(9)-CPython内部原理快速指南(1)
  2. aspx是什么语言_什么是网页
  3. 数据库高级知识——MySql锁机制
  4. iframe标签里面的页面元素只读
  5. 数字后端基本概念介绍<Endcap Cell>
  6. twisted系列教程二–缓慢的诗
  7. 基于web的小区物业管理系统
  8. Python爬虫:爬取必应壁纸(可直接运行)
  9. BP神经网络回归预测模型(python实现)
  10. 相同的js文件在IE浏览器可以响应,但是在Chrome浏览器上没有响应
  11. 别让自大成为职场绊脚石
  12. 这4大场景正被区块链“残忍屠杀”,15个活生生的例子了解一下?
  13. 同花顺_代码解析_技术指标_Z_2
  14. -day26 必备SQL和表关系及授权
  15. sqlserver java驱动_sqlserver jdbc驱动
  16. LinkedIn领英账号达到一周添加好友邀请上限后怎么办?学会这四式三招,你也能解决LinkedIn领英账号添加好友的每周数量限制...
  17. 好东西硬盘故障率还是西数黑盘,绿盘最低啊
  18. Python实现练打字小程序
  19. Android View(一)——View的基础知识
  20. php过滤ascii控制字符

热门文章

  1. CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)
  2. caffe linux下面的调试mnist遇到的问题
  3. 异步消息的性能与激情之Netty开发思路
  4. [转载]github在线更改mysql表结构工具gh-ost
  5. 【Android】3.21 示例21—兴趣点收藏功能
  6. activeMQ支持的四种协议简介及性能比较
  7. Android相对属性布局总结
  8. 谷歌浏览器设置新标签页地址的方法
  9. Bean property 'preFix' is not writable or has an invalid setter method
  10. webpack4+vue打包简单入门 1