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

原题代码如下:

function smallestCommons(arr) {
  return arr;
}


smallestCommons([1,5]);

  最小公倍数的参考资料:https://www.mathsisfun.com/least-common-multiple.html。

因为参数不一定是从小到大排序的,所以需要先对参数做一个排序:

arr=arr.sort();

  

然后需要了解到的是如何求最小公倍数, 通过查询资料了解到最小公倍数的求法,A,B两个数的最小公倍数公式:A*B/gcd(A,B的最大公约数)。

有了这个算法,只需要要对连续数字头两个进行求最小公倍数,然后再把这个值和下一个数字求最小公倍数,遍历到最大参数即可。

 var num=arr[0];
for(var i=arr[0]+1;i<=arr[1];i++){
     num*=i/gcd(i,num);
}

  现在我们还缺的是如何求最大公约数, 需要使用的公式是欧几里德定律。

function gcd(m,n){
  if(m%n===0){
return n;
  }
  return gcd(n,m%n);
}

  完整代码如下:

function smallestCommons(arr) {
  arr=arr.sort();   
  var num=arr[0];
for(var i=arr[0]+1;i<=arr[1];i++){
     num*=i/gcd(i,num);
}
  return num;
}
  function gcd(m,n){
  if(m%n===0)return n;
  return gcd(n,m%n);
  
}


smallestCommons([1,5]);

  

转载于:https://www.cnblogs.com/oldchicken/p/6349282.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值