欧几里德算法描述:

E1.[求余数]

以n除m并令r为所得余数。(我们将有0 ≤ r ≤ n。)

E2[余数为0?]

若r=0,算法结束,n即为答案。

E3[减少]

置m←n, n←r,并返回步骤E1.

其原理依赖于下面的定理

gcd(a, b) = gcd(b, a mod b)

 证明:

a可以表示成a = kb + r,则r = a mod b

假设d是a, b的一个公约数,则有

d | a, d | b,而r = a - kb,因此d | r

因此d是(b, a mod b)的公约数

假设d 是(b,a mod b)的公约数,则

d | b , d |r ,但是a = kb +r

因此d也是(a,b)的公约数

因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

欧几里得算法的C语言表达:

int gcd(int a, int b) { if(a == 0) reutn b; if(b == 0) return a; if(a < b) swap(a, b); int c; while(c = a % b) { b = c; a = b; } return b; }

欧几里得算法的改进(避免a、b之间的交换):

F1.[余数m / n]

以n除m并令m是余数。

F2[它为0?]

如果m = 0,则此算法以n为答案而终止。

F3[余数n / m]

以m除n并令n为余数。

F4[它为0?]

如果n = 0, 则算法以答案m为终止;否则返回步骤F1。

实际上是通过提前完成下一次的取余来弥补交换的过程。

欧几里得改进算法的C语言表达:

int gcd(int a, int b) { if(a == 0) reutn b; if(b == 0) return a; if(a < b) swap(a, b); while(a = a % b) { b = b % a; } return b; }

另外:

GCD (greatest common divisor 或者 highest common factor )

最大公约数的欧几里德[辗转相除]算法及其扩展相关推荐

  1. Python求最小公倍数和最大公约数(附加辗转相除)

    求两个正整数 a,b 的最大公因数与最小公倍数.两个数的最大公因数指的是 a,b 共有的约数中最大的一个.两个数的最小公倍数指的是 a,b 共有的倍数中最小的一个. 输入格式: 在一行中给出两个数字 ...

  2. 最大公约数最小公倍数 辗转相除法 辗转相减法(更相减损法) 穷举法

    最大公约数: 1.辗转相除法 2.辗转相减法(更相减损法) 3.穷举法 最小公倍数:两数的乘积除以最大公约数 方法: 1.判断大小,并使大数赋给a,小数赋给b: 2.辗转相除法:在两数相除余数不为0的 ...

  3. php最大公约数辗转相除程序,[转]辗转相除求最大公约数

    转:蓝魔之泪de万事屋百度博客 http://hi.baidu.com/didihl/blog/item/533b1fec7cea252063d09f82.html 辗转相除算法的简介 在数论中,辗转 ...

  4. 【C/C++】最大公约数和最小公倍数(辗转相除、更相减损、stein)

    一.最大公约数和最小公倍数 数学性质: 如果b是A和B的公约数,那么:b也是A+B的约数,即b是A,B,A+B的公约数.b也是A-B的约数,即b是A,B,A-B的公约数.更一般地,对于任意整数x.y, ...

  5. 辗转相除求最大公约数,最大公倍数

    上次笔试考到这个,不知道辗转相除什么意思,用短除法做的,回来查了一下才知道 辗转相除法也叫欧几里德算法,这是原理 例如,求(319,377): ∵ 377÷319=1(余58) ∴(377,319)= ...

  6. C语言经典例题100道(辗转相除求最大公约数和最小公倍数)

    程序[16] 题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析: (1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数: (2)求最大公约数用辗转相除法(又名 ...

  7. c语言求出两个最大素数,求两个正整数的最大公约数      思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...

    求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) ( ...

  8. 求两个数的最大公约数(辗转相减法)

    更相减损法:也叫更相减损术,是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合. <九章算术>是中国古代的数学专著,其中的 ...

  9. 辗转相减法求最大公约数

    第一次接触这个算法,同时也觉得很奇妙,在本文加以练习,并与大家分享. 辗转相减法是一种简便的求出两数最大公约数的方法.(更相减损术) 辗转相减法(求最大公约数),即尼考曼彻斯法,其特色是做一系列减法, ...

最新文章

  1. signature=60e238a971088f65081a607ed25e04b3,Healthcare Claims Loss Control Systems And Methods
  2. WebApi中跨域解决办法
  3. js 调用 oc 的解释
  4. Eclipse 真机调试检测不到手机解决方案
  5. 我同学的易宝支付面试经历
  6. Java程序开发过程
  7. HBase简介、搭建环境及安装部署
  8. linux limbo镜像文件下载,limbo 2000镜像下载
  9. X4扭曲字体或图形 coreldraw_CorelDRAW X4案例教程上-电子教案文档.ppt
  10. 光电隔离RS485典型电路
  11. python快速入门豆瓣_python爬虫实践——零基础快速入门(二)爬取豆瓣电影
  12. 微信小程序开发与oss防盗链
  13. 标准资本赵晨:Token会推动金融市场的流动性|筱静观察
  14. 各种机械键盘轴线之间的差,究竟好轴
  15. 在计算机上怎么可以谈音乐,怎样在电脑上提取视频中的音乐文件
  16. n-gram详细介绍
  17. Xpatch:免Root实现App加载Xposed插件的一种方法
  18. 使用Python在Excel中批量生成条形码
  19. 基 于 svm 的 图 像 分 类_【材料牛】牛志强组 Angew. :创纪录容量保持率!MOF衍生的非晶态钒基氧化物助力高性能水系锌离子电池...
  20. 关于对xmms安装过程的一点总结!

热门文章

  1. PLSQL_PLSQL读和写XML文件方式(案例)
  2. Uva_11235_Frequent values
  3. kafka最好用的脚本一:kafka-topic
  4. 阿里研究院:解读互联网经济十大议题
  5. WCF学习之旅----基础篇之EnterpriseServices
  6. 听同事讲 Bayesian statistics: Part 1 - Bayesian vs. Frequentist
  7. Delphi 2009 之 TStringBuilder 类[1]: Create
  8. 关于 class helper for ... 语法
  9. [转]context-param和init-param区别 context-param和in...
  10. 使用NAT网关挂载本地物理机