练习:算法小题


一、题目

找到给定参数的最小公倍数,可以被这两个参数整除,也可以被指定范围内的所有整数整除

二、解题思路

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的倍数加一,达到了乘积的效果,最终在当前值被全部子值整除时,即可输出符合条件的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值