求能被兩個給定參數和它們之間的連續數字整除的最小公倍數

找出能被兩個給定參數和它們之間的連續數字整除的最小公倍數。

範圍是兩個數字構成的數組,兩個數字不一定按數字順序排序。

例如對 1 和 3 —— 找出能被 1 和 3 和它們之間所有數字整除的最小公倍數。

注意:
這裏涉及到經典算法:求最大公約數gcd(greatest common divisor)和最小公倍數scm(smallest common multiple)
gcd(最大公約數)算法過程(歐幾里德算法/輾轉相除法)
有兩整數a和b:
① a%b得餘數c,即c=a%b
② 若c=0,則b即爲兩數的最大公約數
③ 若c≠0,則a=b,b=c,再回去執行①

scm算法(最小公倍數算法)
最小公倍數=兩整數的乘積÷最大公約數,即scm=sqrt(a*b)/gcd(a,b)

function smallestCommons(arr) {
  function gcd(val1,val2){
  if(val1%val2===0){
    return val2;
  }else{
    return gcd(val2,val1%val2);
  }
}
  arr=arr.sort(function(a,b){
    return a-b;
  });
  var val=arr[0];
  for(var i=arr[0]+1;i<=arr[1];i++){
    val*=i/gcd(val,i);
  }
  return val;
}


smallestCommons([1,5]);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章