最大公约数和最小公倍数 in Java

最近在学校当助教,课程是Java数据结构,因此重温一下算法和数据结构,也因此把算法和一些Java的特性学习的更深刻,也希望用写博客来监督自己的持续学习。

今天介绍的是Java中的最大公约数和最小公倍数的算法。不啰嗦了,直接上代码:

  • 最大公倍数的普通写法
/**
     * use for loop to calculate common divisor
     * @param x
     * @param y
     * @return
     */
    private int maxCommonDivisor(int x, int y) {
        // only use loop to deal with the problem
        if (x < y) {
            int temp = x;
            x = y;
            y = temp;
        }
        if (y == 0) {
            return x;
        }
        while (x % y != 0) {
            int temp = x % y;
            x = y;
            y = temp;
        }
        return y;
    }
  • 最大公倍数的递归写法
private int maxCommonDivisorRecursion(int x, int y){
         if(x < y){
             //make sure x always larger than y
             int temp = x;
             x = y;
             y = temp;
         }
         if(y ==0){
             return x;
         }
         if(x % y == 0){
             //y can divide x
             return y;
         } else{
             //recursion, and set y to new X, set y as m % n
             return maxCommonDivisorRecursion(y , x % y);
         }
    }

得到最大公倍数后,求最小公倍数,只需要使用公式 a*b/(最大公约数),既得所求:

/**
     * 使用公式,两数相乘,除以两数的最大公约数,所得结果为最小公倍数
     * @param x
     * @param y
     * @return
     */
    private int minCommonMultiple(int x, int y){
        return x*y/maxCommonDivisor(x,y);
    }

References:
[1]http://blog.csdn.net/lwcumt/article/details/8029241
[2]http://www.cnblogs.com/hexiaochun/archive/2012/09/03/2668250.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值