• 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]);
  • 相关阅读:
    Java并发辅助类的使用
    使用List需要注意的点
    构造函数、静态变量、代码块执行顺序
    TreeMap源码分析
    大战红黑树
    关于HashMap多线程下环形链表的总结
    LinkedHashMap源码分析
    「HDU 3292」 No more tricks, Mr Nanguo
    「BZOJ 3122」「SDOI2013」 随机数生成器
    「BZOJ3884」 上帝与集合的正确用法
  • 原文地址:https://www.cnblogs.com/lilicat/p/6256025.html
Copyright © 2020-2023  润新知