最大公约数和最小公倍数--java实现

代码:

   //最大公约数
   public int gcd(int p,int q){
         if(q == 0)    return p;
         return gcd(q, p % q);
    }

   //最小公倍数 
   public int lcm(int p,int q){
         int pq = p * q;
         return pq / gcd(p,q);
    }

测试:

    @Test
    public void go(){
        int p = 5,q =17;
        System.out.println(p+"和"+q+"的最大公约数:"+gcd(p,q));
        System.out.println(p+"和"+q+"的最小公倍数:"+lcm(p,q));
    }
    运行结果:
    5和17的最大公约数:1
    5和17的最小公倍数:85

原理:

  第一个最大公约数使用的2300年前被发明的欧几里得算法求得,大致原理为:

如果有两个非负整数p、q,若q==0,则最大公约数为p;否则,p和q的最大公约数就是p除以q所得的余数和q的最大公约数。

  第二个最小公倍数更简单。

公式:最小公倍数=两整数的乘积÷最大公约数

  

  是不是So Easy!

posted @ 2016-05-01 13:37  洞拐洞拐  阅读(1918)  评论(0编辑  收藏  举报