一 、最大公约数
1、辗转相除法
算法图解:
代码实现:
private static int gcd(int a, int b) {
if (a < b) {
int temp = a;
a = b;
b = temp;
}
while (a%b != 0) {
int c = a%b;
a = b;
b = c;
}
return b;
}
2、辗转相减法
算法图解:
代码实现:
private static int gcd(int a, int b) {
while(a != b) {
if(a>b) {
a = a - b;
} else {
b = b - a;
}
}
return a;
}
3.穷举算法
算法图解:
代码实现:
private static int gcd(int a, int b) {
int n;
for (n = a<b ? a : b; n > 0; n--) {
if (a%n == 0 && b % n == 0) {
break;
}
}
return n;
}
二、最小公倍数
xy=最小公倍数最大公约数
最小公倍数 = x*y/最大公约数
所以接下来求最小公倍数,直接利用最大公倍数的方法。
private static int lcm(int a, int b){
return a * b / gcd(a,b);
}