求最小公倍数的三种方法
- 方法(一) 较大数的倍数对较小数取余
- 方法(二) 公式法 两个数的 乘积 等于他们的 最大公约数 * 最小公倍数
- 方法(三) 分解质因数 不同的质因数出现几次乘几次,相同的质因数累乘出现最多的次数
示例: - 12 的质因数 2
- 26 的质因数 2 13
- 最小公倍数 2 * 2 * 3 * 13
package com.wy;
public class minMultiple {
public static void main(String[] args) {
int x = 99;
int y = 108;
System.out.println("暴力 " + normal(x, y));
System.out.println("公式法 " + commonDivisorMultiple(x, y));
System.out.println("分解质因数 " + div(x, y));
}
public static int normal(int x, int y){
int max = x > y ? x : y;
int min = x < y ? x : y;
int n = max;
while(true) {
if (max % min == 0) {
return max;
}
max += n;
}
}
public static int commonDivisorMultiple(int x, int y) {
return x * y / divisionAndDivision(x, y);
}
public static int divisionAndDivision (int x, int y) {
int max = Math.max(x, y);
int min = Math.min(x, y);
x = max % min;
if (x == 0) {
return min;
} else {
return divisionAndDivision(x, min);
}
}
public static int div(int x, int y) {
int[] array = new int[]{2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
int fact = 1;
int i = 0;
while (i < array.length) {
int data = array[i];
if (x % data == 0 || y % data == 0) {
fact *= data;
if (x % data == 0) {
x /= data;
}
if (y % data == 0) {
y /= data;
}
if (x == 0 && y == 1 || x == 1 && y == 1 || x == 0 && y ==0 || x == 1 && y == 0) {
break;
}
} else {
i++;
}
}
return fact;
}
}