最大公约数(欧几里得算法)
来源:互联网 发布:淘宝卖保健品填厂家 编辑:程序博客网 时间:2024/05/17 20:12
正整数a与b的最大公约数指的是a与b的所有公约数中最大的那个公约数,如4和6的最大公约数是2。
一般用gcd(a,b)来表示a,b的最大公约数,而求解最大公约数常用的欧几里得算法(即辗转相除法)。
欧几里得算法基于下面这个定理:
设a、b均为正整数,则gcd(a, b) = gcd(b, a%b)。
如果a<b,那么定理的结构就是将a和b交换;如果a>b,那么通过这个定理总可以将数据规模变小,并且减小的非常快。这样似乎可以很快就得到结果,只要还需要一个东西:递归边界,即数据规模减小到什么程度使得可以算出结果来。很简单,总所周至:0和任意一个整数a的最大公约数都是a(注意:不是0),这个结论就可以当作递归的边界。由此很容易想到将其写为递归的形式,因为递归的两个关键已经得到:
1.递归式:gcd(a, b) = gcd(b, a%b).
2.递归边界:gcd(a, 0) = a.
于是可以得到下面的求解最大公约数的代码:
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);}
阅读全文
0 0
- 最大公约数(欧几里得算法)
- 最大公约数(欧几里得算法)
- 最大公约数(欧几里得算法)
- 求最大公约数(欧几里得算法)
- 求最大公约数(欧几里得算法)
- 欧几里得算法 最大公约数(Java)
- 欧几里得算法(求最大公约数)
- 欧几里得算法求最大公约数(九度刷题)
- HDOJ 最小公倍数(欧几里得算法求最大公约数)
- 数据结构--求最大公约数(欧几里得算法)
- 一行代码求最大公约数(欧几里得算法)
- Greatest Common Divisor 欧几里得算法(最大公约数)
- 最大公约数 (欧几里得算法)
- 最大公约数--欧几里得算法
- 欧几里得最大公约数算法
- 欧几里得算法求最大公约数
- 欧几里得算法,最大公约数
- 欧几里得算法与最大公约数
- ssh三大框架整合时struts2遇到的简单又很容易忽视的问题
- main函数参数_可变参数
- HDU 2017多校联赛-1012 Balala Power!
- 程序设计思维
- 给时间定一个目标
- 最大公约数(欧几里得算法)
- 托管应用程序的性能优于非托管应用程序?
- Unity3D中上斜坡会下滑的问题
- POJ
- 所爱图书
- STL_vector (不定长数组)
- ThreadPoolExecutor 扩展
- Java将一个list等分成n个list方法
- #COCI#玻璃杯(状压DP)