今天做题发现两个整数的乘积等于这两个整数的最大公约数与最小公倍数的乘积,小学知识居然都忘了,算了,还是来推导一遍吧,虽然很low,但是真的忘记了。
假设:两个正整数 a=8,b=6, c是它们的最大公约数2
a的约数:1,2,4,8
b的约数:1,2,3,6
a的倍数:8,16,24,32...
b的倍数:6,12,18,24,30...
则:
(a/c)*((a)/ ( a /c ) ) = a -------> (8/2) * (8/(8/2)) = 8
从而它们的最大公倍数等于:
(b / c) * ( a / c ) * c = ab / c -------->(6/2) *(8/2) * 2 = 24
所以这两个整数的最大公约数与最小公倍数的乘积等于两个整数的乘积
程序实现:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//调用java.util.Scanner可以获得从键盘输入的数字;
Scanner sc = new Scanner(System.in);
//定义两个整型数字的变量
int min;
int max;
System.out.print("请输入一个数:");
min = sc.nextInt();//nextInt();方法用来获取输入的Int NUM
System.out.print("请输入另一个数:");
max = sc.nextInt();
//调用后面的静态方法;
System.out.println(gongyue(min, max));
System.out.println(gongbei(min, max));
}
// a与b的最大公约数
public static int gongyue(int min, int max) {
while (max % min != 0) {
/**运用递归调用将求余之后的值作为min
* 将之前的min作为max直到求余值为0为止结束循环*/
int temp = max % min;
max = min;
min = temp;
}
return min;
}
// a与b的最小公倍数
public static int gongbei(int min, int max) {
//求公倍数就是将两个数相乘除以最大公约数
return min * max / gongyue(min, max);
}
}
运行:
请输入一个数:32
请输入另一个数:24
8
96
说明:
gongyue(int min, int max)方法中定义的min和max在输入的时候可以不按照顺序输入,因为运用递归调用将求余之后的值作为min,将之前的min作为max直到求余值为0为止结束循环。