Smallest Common Multiple

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

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

例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小公倍数。

示例:

smallestCommons([1, 5])应该返回一个数字。

smallestCommons([1, 5])应该返回 60。
smallestCommons([5, 1])应该返回 60。

smallestCommons([1, 13]) 应该返回 360360。

步骤:

1.从小到大,获得最大最小值

2.所有连续数字值从大到小

3.获得最大公约数,辗转相除法:用小数除大数,如果余数不是零,就把余数和较小的数构成一组新数,继续上面的除法,知道大数被小数约尽,此时比较小的数就是最大公约数 80=36*2+8,36=8*4+4,8=4*2+0

4.两个数之间的最小公倍数为两个数之积除以最大公约数。

 
 1 function smallestCommons(arr) {
 2   //从小到大,获得最大最小值
 3   arr=arr.sort(function(a,b){return a-b;});
 4   var min=arr[0];var max=arr[1];
 5   //所有连续数字值从大到小
 6   var arrtemp=[];
 7   for(var i=max;i>=min;i--){
 8     arrtemp.push(i);
 9   }
10   //获得最大公约数,辗转相除法:用小数除大数,如果余数不是零,就把余数和较小的数构成一组新数,继续上面的除法,知道大数被小数约尽,此时比较小的数就是最大公约数 80=36*2+8,36=8*4+4,8=4*2+0 
11   function getCommons(a,b){
12     if(a%b===0) return b;
13     return getCommons(b,a%b);
14   }
15   //两个数之间的最小公倍数为两个数之积除以最大公约数。
16   return arrtemp.reduce(function(m,n){    
17     return n*m/getCommons(m,n);  
18   });  
19 }
20 
21 smallestCommons([8,2]);
原文地址:https://www.cnblogs.com/lilicat/p/6256025.html