最大公约数及最小公倍数是个什么东西

75 篇文章 0 订阅
55 篇文章 0 订阅



源码地址

 
 
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 。 源码地址
 *         http://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的几次方*最后的差值 == 最大公约数
	 *  http://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;
	}

}




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 。
 *		源码地址 http://yunpan.cn/QD8k8biec66uN
 *******************************************************************
 */
public class commonMultipleDivisor {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a, b, temp;
		int m;
		Scanner in = new Scanner(System.in);
		a = in.nextInt();
		b = in.nextInt();
		if (a < b) {
			temp = a;
			a = b;
			b = temp;
		}
		m = fun1(a, b);
		System.out.println("最大公约数为:" + m);
		System.out.println("最小公倍数为:" + (a * b) / m);
	}

	public static int fun1(int a1, int b1) {
		int c;
		c = a1 % b1;
		while (c > 0) {
			a1 = b1;
			b1 = c;
			c = a1 % b1;
		}
		return (b1);
	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百世修行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值