摘要:
比如: 12和20,最大公因数4,最小公倍数是60。
概念:
最大公因数,也称最大公约数,指两个或多个整数共有约数中最大的一个。求最大公约数有多种方法,常见的有质因数分解法、辗转相除法等等。
公倍数指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数,其中除0以外最小的一个公倍数,叫做这几个数的最小公倍数。
解法:
求最大公因数最简单的方法就是短除法。短除就是在除法中写除数的地方写两个数共有的质因数,
然后落下两个数被公有质因数整除的商,之后再除,以此类推,直到结果互质为止。最后将所有除数相乘,答案就是最大公因数。
最小公倍数的解法是使用分解质因数法,将自然数的质因数写出,再相乘,就可以快速的得到自然数的最小公倍数。
参考代码1:
package com.gx.demo;
public class Test1 {
public static void main(String[] args) {
getResult(12, 20);
}
public static void getResult(int n, int m) {
long min = n < m ? n : m;
long max = n < m ? m : n;
long commonDivisor = 0;// 最大公因数
long commonMultiple = 0;// 最小公倍数
commonMultiple = max;// min和max的最大值作为最小公倍数的初始值
while (true) {
if (commonMultiple % min == 0) {
break;// 跳出循环
}
commonMultiple = commonMultiple + max;
}
// 最大公因数 = max * min / 最小公倍数
commonDivisor = max * min / commonMultiple;
System.out.println("最大公约数:" + commonDivisor);
System.out.println("最小公倍数:" + commonMultiple);
}
}
输出结果:
最大公约数:4
最小公倍数:60
参考代码2:
package com.gx.demo;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数后回车,接着输入第二个数再回车:");
Scanner sc1 = new Scanner(System.in);
int m = sc.nextInt(); // 输入m
int n = sc1.nextInt();// 输入n
int d = (m > n) ? n : m; // m和n的最小值作为最大公约数的初始值
int dm = 0, dn = 0; // m和n除以最大公约数后的因数
for (; d > 0; d--) {// 最大公约数从初始值到1循环
if (m % d == 0 && n % d == 0) { // 如果m和n能整除最大公约数,则说明该公约数符合
dm = m / d; // 求出m除以公约数后的因数
dn = n / d; // 求出n除以公约数后的因数
break; // 跳出循环
}
}
// 格式输出,最小公倍数是最大公约数(d)乘以m除以最大公约数后的因数,再乘以n除以最大公约数后的因数(也就是最大公约数乘以质因数)
System.out.printf("最大公约数=%d, 最小公倍数=%d\n", d, d * dm * dn);
}
}
输出结果:
请输入第一个数后回车,接着输入第二个数再回车:
12
20
最大公约数=4, 最小公倍数=60