1. 蛮力法
先求大数b的倍数集合bMul,再求小数a的倍数x,判断x是否属于大数的倍数集合bMul,如果属于,则x是最小公倍数,停止查找。
//求a和b的最小公倍数
function LCM(a,b) {
var tmp = 0,
bPos = 0, //记录bMul的元素位置
aMul = [],
bMul = [];
//如果a比b大,a和b交换
if (a > b) {
tmp = a;
a = b;
b = tmp;
}
//最坏的情况就是a *b,所以b作为循环次数
for(var i = 1;i <= b ; i++) {
aMul[i-1] = i * a;
bMul[i-1] = i * b;
//在bMul数组中查找a的倍数,如果找到,停止循环
for( var j = bPos; j < i;j++)
{
if (bMul[j] == aMul[i-1] ) {
return bMul[j];
}
}
}
}
2. 质因数分解式
10 = 2 * 5 a--->exp1
8 = 2 * 2 * 2 *2 b---->exp2
LCM(10,8) = 2 * 2 * 2 * 2 * 5 c---->exp3
CM(10,8) = 2 * 2 * 2 * 2 * 5 * i = LCM(10,8) * i
exp3 包含exp1和exp2,则c是a和b的公倍数。
3. 最大公因数GCF(Greatest common factor)
公约数(Greatest common divisor)表示可以同时整除两个或多个数的数,公因数表示两个数或多个数的公共因子,一个数的因子一定能整除这个数,所以公因数和公约数表示的是一个意思。GCF(a,b) = 1,则称a和b互质。
LCD(a,b) = a * b / GCF(a,b)
GCF(a,b)的算法步骤:
1. 求a的因数集合aFact, b的因数集合bFact。
2. 求集合aFact和bFact的交集cFact
3. 求cFact最大的元素gcf