题目:给出两个数字a和b求出他的最大公因数和最小公倍数。
解析:
看到这题的时候一开始我还是觉得挺简单的,但是仔细一想却无从下手,于是乎我只能百度抠破脑袋终于想出来了
最小公倍数的公式为 :
(a∗b)/(最大公倍数) ( a ∗ b ) / ( 最 大 公 倍 数 )
所以我们只需要求出最大公因数就可以求出最小公倍数了
一、辗转相除法(欧几里得算法)
证明就需要大家去百度一下了。这里我们只写算法
思路:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。
1、递归
private static int gcd(int a,int b) {
return (b==0)?a:gcd(b,a%b);
}
2、非递归形式
private static int gcd(int a, int b) {
int rem = 0;
while (b != 0) {
rem= a % b;
a = b;
b = rem;
}
return a;
}
二、相减法(更相减损法)
思路:取两个数中的最大的数做减数,较小的数做被减数,用最大的数减去小数,如果结果为0,则被减数就是这两个数的最大公约数,如果结果不为0,则继续用这两个数中最大的数减较小的数,直到结果为0,则最大公约数为被减数。
private static int gcd(int a, int b) {
while (a != b) {
if(a>b)a-=b;
else b-=a;
}
return a;
}