題目要求
找出能被兩個給定參數和它們之間的連續數字整除的最小公倍數。
範圍是兩個數字構成的數組,兩個數字不一定按數字順序排序。
例如對 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