More than one way to get gcd(greatest common divisor,最大公约数)
2017-06-06 23:35
330 查看
m和n的最大公约数就是能够同时整除他它们的最大正整数。
第一种:欧几里得算法求最大公约数:
第二种:连续整数检测法 求最大公约数:
第一种:欧几里得算法求最大公约数:
/* 欧几里得算法: * 两个不全为0的非负整数m,n的最大公约数记为 gcd(m,m),代表能够整除m和 * n的最大正整数。 * gcd(m,n) = gcd(n, m mod n) (mod 是取余,或取模%) * 重复循环上面的等式,直到 m mod n 等于0。最后的m值就是gcd. * 为什么?gcd(m, 0) = m. m 最后的取值是 m, n的初值的最大公约数。 * gcd(m, 0) 意味着 (前者m % 后者n) == 0,即能整除了。此时的m * 就是最大公约数。 * 举个栗子:gcd(10,6) = gcd(6,4) = gcd(4,2) = gcd(2,0) = 2; * gcd(60,24) = gcd(24,12) = gcd(12,0) = 12; * * 换个算法文字描述如下: * 需求:用欧几里得算法求最大公约数,gcd(m,n); * 第一步:对于给定的m,n,不全为0;m>n;如果n = 0,则返回m值作为结果, * 同时计算过程结束。否则,进入下一步。 * 第二步:将m除以n,取余数赋值给r; * 第三步:将n的值赋值给m,将余数r赋值给n;返回第一步。 * */
/* pseudocode: * gcdByEuclid(m,n) * //使用欧几里得算法计算gcd(m,n) * //输入:两个不全为0的非负整数 * //输出:m, n的最大公约数 * while n ≠ 0 do * r = m mod n * m = n * n = r * return m * /
//Java代码实现 // function to get gcd public static int gcdByEuclid(int m, int n) { int r; while (n != 0) { r = m % n; m = n; n = r; } return m; }
第二种:连续整数检测法 求最大公约数:
/* 根据定义,m 和n 的最大公约数是能够同时整除它们的最大正整数。其中,这个最大公约数不大于m和n的较小者。 令temp = min{m,n}; 检查下t是否能够整除m和n;如果能,t就是最大公约数; 如果不能,将t 减去1,再作判断,继续尝试直到出现一个值能同时整除m 和 n; 而且,t>=1(当t = 1时,判断肯定成立,因为1能整除任何正整数。) */
/* 连续整数法求最大公约数算法 文字描述: 第一步:将min{m, n} 赋值给temp; 第二步:m 除以 t, 取余数。如果余数为0,进入第三步。否则,进入第四步。 第三步:m 除以t,取余数,如果余数为0,返回temp作为结果; 否则,进入第四步。 第四步:把 temp 值减1,返回第二步。 */
pseudocode: gcdByContinuouslyDivison(m, n) //使用连续整除的方法计算gcd(m,n) //输入两个正整数m,n //输出m, n 的最大公约数 int temp = min{m, n} while(m mod temp ≠ 0 or n mod temp ≠ 0) do temp-- return temp
//Java代码实现 // function to get gcd public static int gcdByContinuousDivision(int m, int n) { // 第一步:将min{m, n} 赋值给temp; int temp = m; if (m > n) { temp = n; } // 判断m%temp, n%temp, while (m % temp != 0 || n % temp != 0) { //第四步:把 temp 值减1 temp--; } return temp; }
相关文章推荐
- GCD(Greatest common divisor)求最大公约数算法
- Eculid算法递归地求解GCD(Greatest Common Divisor,最大公约数)
- greatest common divisor introduction to algorithm 3rd, example 31.2
- Algorithms - 最大公约数(greatest common divisor)-欧几里得(Euclid) 算法 及 代码
- GCD (greatest common divisor)【求最大公约数】
- getGreatestCommonDivisor
- GCD (Greatest Common Divisor)
- Greatest Common Divisor(GCD) of Two Numbers
- Euclid Greatest Common Divisor-GCD - 欧几里得 最大公约数
- Greatest Common Divisor (GCD) - Euclidean algorithm
- Calculate the Greatest Commom Divisor (GCD) and Lowest Common Multiple (LCP) of Two Integers
- Greatest Common Divisor(GCD) of Two Numbers
- More than one way to get the max of 3 numbers.
- 算法分析---求最大公约数 gcd(int x,int y) (greatest common divisor )
- [计算最大公因子]Finding the greatest common divisor (gcd) of 2 numbers
- 最大公约数GCD(Greatest Common Divisor)算法小结
- The greatest common divisor gcd(最大公约数)
- Algorithms - 最大公约数(greatest common divisor)-欧几里得(Euclid) 算法 及 代码
- Greatest Common Divisor(GCD) of Two Numbers
- [编程之美]最大公约数(Greatest Common Divisor)