閱讀944 返回首頁    go 阿裏雲 go 技術社區[雲棲]


最大公約數及最小公倍數是個什麼東西



源碼地址


import java.util.Scanner;

/**
 * @author cc
 ******************************************************************** 
 *         1)最大公約數(最大公因數)就是幾個數公有的因數中最大的一個。例12與18 12的因數有1,12,2,6,3,4
 *         18的因數有1,18,2,9,6,3 公有的因數有1,2,3,6, 所以6就是12與18的最大公約數.
 * 
 *         2)最小公倍數就是幾個數公有的倍數中最小的一個。 例4和6 4的倍數有4,8,12,16,20,24,……
 *         6的倍數有6,12,18,24,…… 4和6 公倍數 12,18……, 所以4和6的最小公倍數是12 。 源碼地址
 *         https://yunpan.cn/QD8k8biec66uN
 ******************************************************************* 
 */
public class commonMultipleDivisor {
	/**
	 * 
	 * @param args
	 * 最小公倍數=兩數的乘積/最大公約數
	 * 最大公約數=兩數的乘積/最小公倍數
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = 0, b = 0;
		int m;

		Scanner in = new Scanner(System.in);
		while (a <= 0 || b <= 0) {
			System.out.println(" 請一次輸入兩個非零正整數 \n");
			try {
				a = in.nextInt();
				b = in.nextInt();
			} catch (Exception e) {
			}
		}
		in.close();

		m = fun2(a, b);
		System.out.println("最大公約數為:" + m);
		System.out.println("最小公倍數為:" + (a * b) / m);
	}

	public static int fun1(int a1, int b1) {
		int c, temp;

		if (a1 < b1) {
			temp = a1;
			a1 = b1;
			b1 = temp;
		}
		c = a1 % b1;
		while (c > 0) {
			a1 = b1;
			b1 = c;
			c = a1 % b1;
		}
		return (b1);
	}

	/**
	 * 更相減損法
	 *  1.兩個數都為偶數除2直到一個不為偶數
	 *  2.兩數大的減小數,差與被減數進行大的減小的,直到差==被減數
	 *  3.第一步除了幾次2,則用2的幾次方*最後的差值 == 最大公約數
	 *  https://baike.baidu.com/link?url=ptGm72BthG_3TlM2GqkEAUhnsd15RFxMTMfHxlwAYXl2MobF1feLKepGyp6arNxw
	 */
	public static int fun2(int m1, int m2) {
		int n = 0;
		int temp = 0;
		while (m1 / 2 == 0 && m2 / 2 == 0) {
			m1 = m1 / 2;
			m2 = m2 / 2;
			n++;
		}
		while (m1 != m2) {
			if (m1 < m2) {
				m2 = m2 - m1;
			} else {
				m1 = m1 - m2;
			}
		}
		if (0 != n) {
			temp = 2 ^ n * m1;
		} else {
			temp = m1;
		}
		return temp;
	}

}









最後更新:2017-04-03 12:53:57

  上一篇:go Edittext監聽動態改變
  下一篇:go 要知其然還要知其所以然printChar