最大公约数的欧几里德[辗转相除]算法及其扩展
欧几里德算法描述:
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 )
最大公约数的欧几里德[辗转相除]算法及其扩展相关推荐
- Python求最小公倍数和最大公约数(附加辗转相除)
求两个正整数 a,b 的最大公因数与最小公倍数.两个数的最大公因数指的是 a,b 共有的约数中最大的一个.两个数的最小公倍数指的是 a,b 共有的倍数中最小的一个. 输入格式: 在一行中给出两个数字 ...
- 最大公约数最小公倍数 辗转相除法 辗转相减法(更相减损法) 穷举法
最大公约数: 1.辗转相除法 2.辗转相减法(更相减损法) 3.穷举法 最小公倍数:两数的乘积除以最大公约数 方法: 1.判断大小,并使大数赋给a,小数赋给b: 2.辗转相除法:在两数相除余数不为0的 ...
- php最大公约数辗转相除程序,[转]辗转相除求最大公约数
转:蓝魔之泪de万事屋百度博客 http://hi.baidu.com/didihl/blog/item/533b1fec7cea252063d09f82.html 辗转相除算法的简介 在数论中,辗转 ...
- 【C/C++】最大公约数和最小公倍数(辗转相除、更相减损、stein)
一.最大公约数和最小公倍数 数学性质: 如果b是A和B的公约数,那么:b也是A+B的约数,即b是A,B,A+B的公约数.b也是A-B的约数,即b是A,B,A-B的公约数.更一般地,对于任意整数x.y, ...
- 辗转相除求最大公约数,最大公倍数
上次笔试考到这个,不知道辗转相除什么意思,用短除法做的,回来查了一下才知道 辗转相除法也叫欧几里德算法,这是原理 例如,求(319,377): ∵ 377÷319=1(余58) ∴(377,319)= ...
- C语言经典例题100道(辗转相除求最大公约数和最小公倍数)
程序[16] 题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析: (1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数: (2)求最大公约数用辗转相除法(又名 ...
- c语言求出两个最大素数,求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...
求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) ( ...
- 求两个数的最大公约数(辗转相减法)
更相减损法:也叫更相减损术,是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合. <九章算术>是中国古代的数学专著,其中的 ...
- 辗转相减法求最大公约数
第一次接触这个算法,同时也觉得很奇妙,在本文加以练习,并与大家分享. 辗转相减法是一种简便的求出两数最大公约数的方法.(更相减损术) 辗转相减法(求最大公约数),即尼考曼彻斯法,其特色是做一系列减法, ...
最新文章
- signature=60e238a971088f65081a607ed25e04b3,Healthcare Claims Loss Control Systems And Methods
- WebApi中跨域解决办法
- js 调用 oc 的解释
- Eclipse 真机调试检测不到手机解决方案
- 我同学的易宝支付面试经历
- Java程序开发过程
- HBase简介、搭建环境及安装部署
- linux limbo镜像文件下载,limbo 2000镜像下载
- X4扭曲字体或图形 coreldraw_CorelDRAW X4案例教程上-电子教案文档.ppt
- 光电隔离RS485典型电路
- python快速入门豆瓣_python爬虫实践——零基础快速入门(二)爬取豆瓣电影
- 微信小程序开发与oss防盗链
- 标准资本赵晨:Token会推动金融市场的流动性|筱静观察
- 各种机械键盘轴线之间的差,究竟好轴
- 在计算机上怎么可以谈音乐,怎样在电脑上提取视频中的音乐文件
- n-gram详细介绍
- Xpatch:免Root实现App加载Xposed插件的一种方法
- 使用Python在Excel中批量生成条形码
- 基 于 svm 的 图 像 分 类_【材料牛】牛志强组 Angew. :创纪录容量保持率!MOF衍生的非晶态钒基氧化物助力高性能水系锌离子电池...
- 关于对xmms安装过程的一点总结!
热门文章
- PLSQL_PLSQL读和写XML文件方式(案例)
- Uva_11235_Frequent values
- kafka最好用的脚本一:kafka-topic
- 阿里研究院:解读互联网经济十大议题
- WCF学习之旅----基础篇之EnterpriseServices
- 听同事讲 Bayesian statistics: Part 1 - Bayesian vs. Frequentist
- Delphi 2009 之 TStringBuilder 类[1]: Create
- 关于 class helper for ... 语法
- [转]context-param和init-param区别 context-param和in...
- 使用NAT网关挂载本地物理机