输入两个正整数M和N,求最大公约数和最小公倍数。

摘要:
  比如: 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

猜你喜欢

转载自blog.csdn.net/weixin_44563573/article/details/103460651
今日推荐