【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

/*
	2017年3月2日15:10:11
	java基础50道经典练习题 例6
  Author:ZJY(&&)
  Purpose:最大公约数和最小公倍数的应用
	最大公约数:把每个数分别分解质因数,再把各数中的全部公有质
	因数提取出来连乘,所得的积就是这几个数的最大公约数。
  例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,
  60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是
  2×2×3=12,所以,(24,60)=12。
  最小公倍数: 把各数中的全部公有的质因数和独有的质因数提取出来
  连乘,所得的积就是这几个数的最小公倍数。
	例如:求6和15的最小公倍数。先分解质因数,得6=2×3,15=3×5,
	6和15的全部公有的质因数是3,6独有质因数是2,15独有的质因数是5,
	2×3×5=30。
	【程序6】
	题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
	程序分析:利用辗除法。
*/
public class ProgramNo6_1
{
	public static void main(String[] args)
	{
	    int num1 = 0, num2 = 0;
		try {
			num1 = Integer.parseInt(args[0]);
			num2 = Integer.parseInt(args[1]);
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.print("请输出需要计算最大公约数的两个数: ");
			return;
		}
		int maxConvention = maxConventionNum(num1, num2);
		System.out.println(num1 + "和" + num2 + "的最大公约数是: " + maxConvention);
		int minMultiple = minMultipleNum(num1, num2);
		System.out.println(num1 + "和" + num2 + "的最小公倍数是: " + minMultiple);
	}
	private static int maxConventionNum(int num1, int num2) {
		int maxConvention = 1;
		int min = ((num1 > num2)? num2: num1);
		for (int i=2; i num2)? num2: num1);
				maxConvention *= i;
			}
		}
		return maxConvention;
	}
	private static int minMultipleNum(int num1, int num2) {
		int maxConvention = maxConventionNum(num1, num2);
		return (num1*num2/maxConvention); //最小公倍数等于两数的乘积除以最大公约数
		//因为两数同时除以2以上的质数,直到两个数的商互为质数;它们所有的共同约数乘积就是
		//最大公约数,它们所有约数的乘积再乘以商的积就是最小公倍数;如:12 = 2*2*3; 
		//18 = 2*3*3; 它们公共的约数为2*3所以最大公约数为6;最小公倍数当两数约数一样,只取
		//一个,如12个18都是2*3,所以只取一个再乘以各自的商,即2*3*3*2 = 36;所以最小公倍数
		//可以等于12*18/最大公约数,就是除以多乘的2*3;
	}
	//方法二:
	//private static int minMultipleNum(int num1, int num2) {
		//int max = 0;
		//for (max=1; ; max++) {
			//if((0 == max%num1)&&(0 == max%num2))
				//break;
		//}
		//return max;
	//}
}


/*
	2017年3月2日15:29:25
	java基础50道经典练习题 例6
     Author:ZJY(&&)
     Purpose:最大公约数和最小公倍数的应用
*/
public class ProgramNo6_2
{
	public static void main(String[] args)
	{
	    int num1 = 0, num2 = 0;
		try {
			num1 = Integer.parseInt(args[0]);
			num2 = Integer.parseInt(args[1]);
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.print("输入有误!!");
			return;
		}
		max_minNum(num1, num2);
	}
	
	//辗除法
	private static void max_minNum(int num1, int num2) {
		int temp = 0, yshu = 0, bshu = 0;

		bshu = num1*num2;
		if(num1 > num2) {
			temp = num2;
			num2 = num1;
			num1 = temp;
		}
		//两个数相除,取最小数和余数再相除,直到余数为零,此时的被除数为最大公约数
		while (num1 != 0) { 
			temp = num2%num1;
			num2 = num1;
			num1 = temp;
		}
		yshu = num2;
		bshu = bshu/yshu; //最小公倍数的两数的乘积除以最大公约数
		System.out.println(num1 + "和" + num2 + "的最大公约数是: " + yshu);
		System.out.println(num1 + "和" + num2 + "的最小公倍数是: " + bshu);
	}

}





你可能感兴趣的:(java基础50道经典练习题)