首先我们先了解欧几里得这个人。俗话说:不了解一个人,很难走进他的思想。欧几里得是约公元前330年~公元前275年的古希腊数学家,被称为“几何之父”。《几何原本》就是他的著作。而欧几里得算法是《几何原本》中的一个用于求两个数的最大公约数的算法。同时也被称为“辗转相除法”。
计算公式:gcd(a,b) = gcd(b, a mod b)
了解了欧几里得算法后,那,什么是最大公约数?接下来我们看看最大公约数的定理:
两个整数的最大公约数等于较小的那个数和两数相除余数的最大公约数(Greatest Common Divisor)缩写为GCD。
这介绍了欧几里得算法的思路,就是把上面的公式的符号语言翻译成自然语言。下面是最大公约数的概念:如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数。几个整数中共有的约数,叫做这几个数的公约数,其中最大的一个,叫做这就个数的最大公约数。
例如:12,18的公约数又1,2,3,6.其中6在其中最大,也可以说6是12和18的最大公约数。
我们希望通过上述信息,找到怎样使用编程语言描述欧几里得算法,并封装成方法。以后遇见同类问题,即使,不知道上述概念,定理的人也能正确求出两个数的最大公约数。
思路:
求两个非负整数a,b是我最大公约数。
1.若b等于0,则最大公约数就是a。(0与一个数的最大公约数就是这个数的本身)
2.b不等于0,a除以b得到的余数c,a和b的最大公约数也就是b和c的最大公约数(这里用到了递归的思路)。
Java代码如下:
//求最大公约数
public static int gcd(int a ,int b) {
if(b == 0) {
return a;
}
int c = a % b;
return gcd(b,c);
}
测试:
public static void main(String[] args) {
int a = 12;
int b = 18;
int result = gcd(a,b);
System.out.println(a + "和" + b + "的最大公约数是" + result);
}
输出结果: