最大公約數及最小公倍數是個什麼東西
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