辗转相除法计算最大公约数

   下面先介绍一下欧几里得的辗转相除法的原理:

    辗转相除法使用到的原理很聪明也很简单,假设用 f( x, y ) 表示 x, y 的最大公约数,取 k = x / y,b = x % y,则 x = ky + b,如果一个数能够同时整除 x 和 y,则必能同时整除 b 和 y。而能够同时整除 b 和 y 的数也必能同时整除 x 和 y,即 x 和 y 的公约数与 b 和 y 的公约数是相同的,其最大公约数也是相同的 ,则有f ( x, y ) = f ( y, y % x ) ( y > 0 ),如此便可把原问题转化为求两个更小数的最大公约数,两个数取模为 0。计算出最大公约数之后,最小公倍数就比较简单了。 可以用 x * y / f(x, y)就行了。

    以下给出用Java实现的算法。

    /**
     * 最大公约数计算方法
     *
     * @param a
     * @param b
     * @return
     */
    public static int getGCD(int a, int b) {
        int mod = a % b;
        if (mod == 0) {
            return b;
        } else {
            return getGCD(b, mod);
        }
    }

 

再给出main方法。

    public static void main(String[] args) throws IOException {

        int num1 = **;
        int num2 = **;
        int gcd = -1;
        if (num1 == 0 || num2 == 0) {
            System.out.println("两个数中不能有0");
        } else {
            gcd = GcdEuclidUtil.getGCD(num1, num2);
            System.out.println(num1 + " 和 " + num2 + " 最大公约数是 " + gcd);
        }

        if (gcd != -1) {
            int lcm = num1 * num2 / gcd;
            System.out.println(num1 + " 和 " + num2 + " 最小公倍数是 " + lcm);
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值