最大公约数
最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。
最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。
java代码中实现了这三种算法
方法一:辗转相除
public static int gcd(int num1, int num2) {
while (true) {
if ((num1 = num1 % num2) == 0)
return num2;
if ((num2 = num2 % num1) == 0)
return num1;
}
}
方法二:枚举法
public static int gcd(int num1, int num2) {
int s = 1;
int i
for (i = 2; i <= num1 && i <= num2; i++) {
if (num1 % i == 0 && num2 % i == 0) {
s = i;
}
}
return s;
}
方法三:相减法
public static int gcd(int num1, int num2) {
while (num1 != num2)//a不等b
if (num1 > num2) {
num1 = num1 - num2;
} else {
num2 = num2 - num1;
}
return num1;
}
最小公倍数
两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也有同样的记号。
public static int lcm(int num1, int num2, int gcd) {
return num1 * num2 / gcd;
}
下面是主函数,我是解决三个数的最大公约数,所以先求出前两个数的最大公约数,在把结果和第三个数再求
public static void main(String[] args) {
System.out.println("输入三个数:");
Scanner scanner = new Scanner(System.in);
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
int num3 = scanner.nextInt();
int gcd = gcd(num1, num2);
int gcd1 = gcd(num3, gcd);
if (gcd1 == 1) {
System.out.println("没有最大公约数");
} else {
System.out.println("最大公约数是" + gcd1);
}
int lcm = lcm(num1, num2, gcd);
int gcd2 = gcd(lcm, num3);
System.out.println("最小公倍数是" + lcm(lcm, num3, gcd2));
}