Smallest Common Multiple

题目要求

找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。

范围是两个数字构成的数组,两个数字不一定按数字顺序排序。

例如对 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


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值