最大公约数与最小公倍数

一:最大公约数gcd【Greatest Common Divisor】

  1、一般多采用辗转相除法寻找两个数的最大公约数gcd:总是用较大的数%较小的数,然后用余数取代较大数。

    例如:gcd(a,b),令i=a/b;j=a%b,那么gcd(a,b)=gcd(b*i+j,b)=gcd(j,b):用j取代了较大的a;

       而且我们可知:j<b是一定成立的,否则就是b*(i+1)+...了:所以让gcd(j,b)=gcd(b,j);

       直到两个数种较小的那个数为0时,返回的那个较大的数就是最大公约数;

  2、如果要求多个数的最大公约数:gcd(a,b,c,...)

     先求gcd(a,b),再求gcd(gcd(a,b),c)......即可;

二:最小公倍数 lcm【Least Common multiple】 

  对于两个数的最小公倍数lcm和最大公约数gcd,满足以下条件:

  a*b=gcd(a,b)*lcm(a,b);

  所以,lcm借用gcd一步到位;

三:gcd与lcm的java代码如下: 

 1 private  int gcd(int a,int b){
 2     while(b!=0){
 3         int temp=a%b;
 4         a=b;    //注意b>temp,b与temp比较是较大的那个
 5         b=temp;
 6     }
 7     return a;
 8 }
 9 private  int lcm(int a,int b){
10     return (a*b)/gcd(a,b);
11 }

 

原文地址:https://www.cnblogs.com/whtblog/p/8901995.html