最大公约数的欧几里德算法
2017-02-22 22:28
337 查看
欧几里德算法:gcd(a,b) == gcd(a,(b mod a)):其中b>=a,我们首先证明下这个:
令c=gcd(a,b),则存在整数k1,k2使 k1*c=a、k2*c=b;
令r=b mod a,则存在k3使得k3*a+r=b,将上面的a、b分别代入可得到:r=(k2-k1*k3)*c,即r(b mod a)是a、b最大公约数c的倍数。相应的代码为:
令c=gcd(a,b),则存在整数k1,k2使 k1*c=a、k2*c=b;
令r=b mod a,则存在k3使得k3*a+r=b,将上面的a、b分别代入可得到:r=(k2-k1*k3)*c,即r(b mod a)是a、b最大公约数c的倍数。相应的代码为:
package com.daelly.algorithm.hcf; public class Main { public static void main(String[] args) { System.out.println(gcd(6, 4)); System.out.println(gcd(6, 12)); System.out.println(lcm(10, 8)); } /** * 欧几里德算法: * gcd(a, b) == gcd((b % a), a) * @param a * @param b * @return */ public static int gcd(int a, int b) { if(a > b) {//交换 a = a + b; b = a - b;//after this b become a a = a - b; } int r = 0; while (a != 0) { r = b % a; b = a; a = r; } return b; } /** * 最小公倍数,基于最大公约数来求 * @param a * @param b * @return */ public static int lcm(int a, int b) { return (a * b) / gcd(a, b); } }
相关文章推荐
- 欧几里德算法(辗转相除法)计算两个整数的最大公约数
- 最大公约数----欧几里德算法
- 算法初步学习一 欧几里德算法(最大公约数)
- 欧几里德算法(辗转相除法) 求最大公约数
- 欧几里德算法求最大公约数
- 最大公约数算法——欧几里德算法
- 求2个数的最大公约数--欧几里德算法
- 最大公约数与欧几里德算法
- 最大公约数与欧几里德算法
- 欧几里德算法(辗转相处算法:最大公约数算法)
- 欧几里德算法——最大公约数
- 最大公约数与欧几里德算法
- 求两个整数最大公约数的欧几里德算法和求幂运算程序
- 欧几里德算法求最大公约数
- 欧几里德算法求最大公约数
- 欧几里德算法(辗转相除法):求两个整数最大公约数
- 欧几里德算法(最大公约数算法)
- 欧几里德算法求最大公约数
- 欧几里德算法(最大公约数)
- 求最大公约数--欧几里德算法 及 最小公倍数