最大公约数与最小公倍数
一:最大公约数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 }