问题描述:
求输入数字间的最大公约数和最小公倍数
解题思路:
最大公约数求法:辗转相除法,又称“欧几里得算法”
1>求两个数的最大公约数:如果m > n,令余数remainder = m%n,如果余数不为0,则令m = n, n = remainder,再次remainder = m%n,直到remainder = 0,此时n就是最大公约数。
2>求多个数的最大公约数:先求出其中两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个为止,最后所得的那个最大公约数,就是所求的几个数的最大公约数
最小公倍数求法:短除算法
两个数相乘等于这两个数的最大公约数和最小公倍数的积。
Java源码实现:
public static void maxDivisorAndMinMultiple(int m,int n) {
int oldM = m;
int oldN = n;
if (m < n) {
int temp = m;
m = n;
n = temp;
}
while(m % n != 0) {
int temp = m % n;
m = n;
n = temp;
}
System.out.println(n);
System.out.println(oldM * oldN / n);
}