【java最大公约数和最小公倍数】
求两个数的最小公倍数和最大公约数是最基本也是最经典的算法之一。现在我们来介绍一下这两个算法的思想,以及最小公倍数和最大公约数之间的联系(这是很多人忽略的)。最后我们会用java来实现这两个算法。
最大公约数:
求最大公约数一般采用欧几里德算法。
欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数。其计算原理依赖于下面的定理:
定理: gcd(a, b) = gcd(b, a mod b) //此函数作用是求最大公约数
代码如下:
public static void main(String[] args) {
System.out.println("(求最大公约数)请依次输入两个数的值:");
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
System.out.println(a+"和"+b+"的最大公约数是:"+caculate(a,b));
}
private static int caculate(int a, int b) {
while(a != b){
if(a > b){
a = a - b;
}
else{
b = b - a;
}
}
return a;
}
最大公约数:
最大公约数好像就没有例如欧几里得算法这样的现成算法了,那怎么办呢?
别急,因为实际上最大公约数和最小公倍数之间有着某种不可言喻的关系的!!!
假如有a,b两个数。我们把a看成由两部分组成的:a和b的共有部分(最大公约数),a的私有部分。b也看成:a和b的共有部分和b的私有部分。