一、题目
找到给定参数的最小公倍数,可以被这两个参数整除,也可以被指定范围内的所有整数整除
二、解题思路
1、找出最小公倍数
按照题目的意思即min与max的乘积
2、在min与max的范围内遍历是否符合要求
当最小公倍数能够被范围内的所有值整除时,即可输出这个值
三、代码实操
排序代码
const [min,max]=arr.sort((a,b)=>a-b);//将数组的顺序按从小到大排列
const numberDivisors=max-min+1; //计算出数组的数值个数
范围内的阶乘
// 最小公倍数的最大值为min与max的阶乘
let upperBound=1;
for(let i=min;i<=max;i++){
upperBound*=i;
}
循环遍历
// 循环遍历max的倍数
for(let multiple=max;multiple<=upperBound;multiple+=max){
let divisorCount=0;//给公因数赋值
// 循环遍历直到最小公倍数能够被所有值整除
for(let i=min;i<=max;i++){
if(multiple%i===0){
// 当有一个被整除时,divisorCount+1
divisorCount+=1;
}
}
//直到divisorCount的大小与numberDivisors相等,意味着最小公倍数能够被全部整除
if(divisorCount===numberDivisors){
return multiple;
}
}
代码整体
function smallestCommons(arr) {
const [min,max]=arr.sort((a,b)=>a-b);//将数组的顺序按从小到大排列
const numberDivisors=max-min+1; //计算出数组的数值个数
// 最小公倍数的最大值为min与max的阶乘
let upperBound=1;
for(let i=min;i<=max;i++){
upperBound*=i;
}
// 循环遍历max的倍数
for(let multiple=max;multiple<=upperBound;multiple+=max){
let divisorCount=0;//给公因数赋值
// 循环遍历直到最小公倍数能够被所有值整除
for(let i=min;i<=max;i++){
if(multiple%i===0){
// 当有一个被整除时,divisorCount+1
divisorCount+=1;
}
}
//直到divisorCount的大小与numberDivisors相等,意味着最小公倍数能够被全部整除
if(divisorCount===numberDivisors){
return multiple;
}
}
}
smallestCommons([1,5]);
总结
该题目的关键点是将循环的加数赋值为max,在当前值multiple不被全部子值整除时,则multiple进行max的加,意思为max的倍数加一,达到了乘积的效果,最终在当前值被全部子值整除时,即可输出符合条件的值。