题目要求
找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。
范围是两个数字构成的数组,两个数字不一定按数字顺序排序。
例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小公倍数。
参考资料:最小公倍数
解析
最小公倍数的判断方法
1、如果题目只是给了两个较小的数字(如1,2),求最小公倍数,无疑使用数组存储找到相同数字最为便捷,但是题目给出的数值范围较大,此方法不合适
2、通过a*b/(a和b的最大公约数)也可以得到a和b的最小公倍数,在通过循环将a和b的最小公倍数与数组中下一位数字c比较下去,即可得到数组数值范围内的最小公倍数
解题思路
第一步:将两个给定参数按从大到小的顺序排列(从小到大也行,跟后面的操作相关)并将其中未在数组中显示的数据存入一个新数组
第二步:将新数组中的每个元素通过reduce完成遍历,返回新数组中的最小公倍数
第三步:编写一个函数完成对两个参数求最大公约数
第四步:将大象放进去,关上门
Javascript代码
function smallestCommons(arr) {
arr.sort(function(a,b){return a-b;});
var arrs = [];
for(var i = arr[0];i <= arr[1];i++){
arrs.push(i);
}
var gcd = function(a,b){
if(a%b===0)
return b;
else
return gcd(b,a%b);
};
return arrs.reduce(function(a,b){
return a*b/gcd(a,b);
});
}
smallestCommons([1,5]);
结语
感觉算法题目总是和数学有着不可分割的关系,写写算法,感觉自己数学都变好了=。=
简洁的算法都是建立在数学公式的简洁之上的,数学好真的挺重要的2333