文章目录
最小公倍数
目前我所知道的最小公倍数有以下两种求法,一种是直接求最小公倍数,一种是已知最大公约数求最小公倍数。2.2是2.1的优化
1.求最小公倍数
运行结果图(求2和3的最小公倍数):
2.1已知最大公约数求最小公倍数
public int lcm(int x,int y){
return x*y/gcd(x,y);//gcd(x,y)是x和y的最大公约数
}
例如:
a.求 2和4的最小公倍数,2和4的最大公约数为2,则它的最小公倍数就等于(24)/2=4;
b.求3和4的最小公倍数,3和4的最大公约数为1,则它的最小公倍数就等于(34)/1=12,即12就是3和4的最小公倍数。
2.2已知最大公约数求最小公倍数(当x和y比较大的时候,2.1的方法可能会导致溢出)
public int lcm(int x,int y){
int num=gcd(x,y);
return (x/num)*(y/num)*gcd;
}
这个就不举例子啦,我相信你们聪明的大脑肯定是可以想明白的。
最大公约数
1.辗转相除法求最大公约数
我用的是递归,当然也可以使用迭代。
2.更相减损术法求最大公约数
更相减损术法只适合于求两个正整数的最大公约数
,有负数的话就求不了。
上述代码中也可以不提前除2,但是效率会有所下降,特别是两个都是特别大的数的时候。
最大公约数的计算方法有很多,以上就是常用的两种,不过要注意, 辗转相除法 不仅使用于正整数还适用于负整数,一整一负也可以;but !!!
更相减损术法只适用于两个正整数求最大公约数.
有什么错误的话,欢迎大家指出,我一定第一时间进行修改。