gcd(a, b),就是求a和b的最大公约数
lcm(a, b),就是求a和b的最小公倍数
欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。。下面记几个公式,证明以后再补。
1.gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|)
2.gcd(a,b) = gcd(b,a mod b);
3.a,b互质等价于gcd(a,b) = 1;
4.a*b = gcd(a,b)*lcm(a,b);
5.由上一个公式可得,lcm(a,b) = a*b/gcd(a,b) = a/gcd(a,b)*b(防止溢出)
最大公约数求法
递归求法:
//递归做法
public static int gcd1(int a,int b)
{
if(b == 0)
{
return a;
}
return gcd1(b,a%b);
}
循环求法:
//循环做法
public static int gcd2(int a,int b)
{
int r;
while(b != 0)
{
r = a%b;
a = b;
b = r;
}
return a;
}
另一种写法是:
public static int gcd3(int a,int b)
{
return b != 0?gcd3(b,a%b):a;
}
最小公倍数:
public static int lcm(int a,int b)
{
return a/gcd1(a,b)*b;
}
另外还有几个公式:
gcd(ka, kb) = k * gcd(a, b)
lcm(ka, kb) = k * lcm(a, b)
lcm(S/a, S/b) = S/gcd(a, b)
嗯,我也不会证。。
参考Blog:
https://www.cnblogs.com/linyujun/p/5167914.html
https://blog.csdn.net/qq_35821988/article/details/78885910
https://blog.csdn.net/u011409995/article/details/33727557