js-FCC算法Smallest Common Multiple。找出两个参数和它们之间的连续数字的最小公倍数。

存档。

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

function smallestCommons(arr) {
  //分解质因数法,分解为若干个质数相乘
  var arrratio=[];
  var min=Math.min(arr[0],arr[1]);
  var max=Math.max(arr[0],arr[1]);
  for(var i=min+1;i<max;i++){
    arr.push(i);
  }
  //找出小于max的所有质数
  var arrtemp=[];
  for(var j=2;j<=max;j++){
    arrtemp.push(j);
  }
  var prime=arrtemp.filter(function(val){
    for(var k=2;k<val;k++){
      if(val%k===0){
        return false;
      }
    }
    return true;
  });
  //用这一排数分别除以从小到大的质数,如果某个数能除尽,则把那个数变为除后的数,把这个质数放在arrratio数组里备用。直至arr里每个数都变成1。这个方法是分解质因数法,详情见小学或初中课本。
  while(arr.reduce(function(a,b){return a+b;})!==(max-min+1)){
    for(var m=0;m<prime.length;m++){
      var isratio=0;
      for(var n=0;n<arr.length;n++){
        if(arr[n]%prime[m]===0){
          isratio=1;
          arr[n]=arr[n]/prime[m];
        }
      }
      if(isratio){
        arrratio[arrratio.length]=prime[m];
      }
    }
  }
  //最后把arrratio数组里的数相乘便是这一组数的最小公倍数。
  return arrratio.reduce(function(a,b){return a*b;});
  
}


smallestCommons([1,13]);

1到13的数的最小公倍数

原文地址:https://www.cnblogs.com/zczhangcui/p/6083993.html