zoukankan      html  css  js  c++  java
  • Smallest Common Multiple

    找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。 范围是两个数字构成的数组,两个数字不一定按数字顺序排序。 例如对 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)

    //求val1和val2的最大公约数(greatest common divisor)
    //欧几里德算法(辗转相除法)
    function gcd(val1,val2){
      if(val1%val2===0)
        return val2;
      else
        return gcd(val2,val1%val2);
    }
    
    function smallestCommons(arr) {
      //将arr按升序排序
      arr=arr.sort(function(a,b){
        return a-b;
      });  
      //求a和b的最小公倍数scm(smallest common multiple)
      //scm=abs(a*b)/gcd(a,b)
      var val=arr[0];
      //这里求多个数的最小公倍数:先求出两个数的scm1,再求scm1与第三个数的scm2……依次循环
      for(var i=arr[0]+1;i<=arr[1];i++){
        val *=i/gcd(val,i);
      }
      return val;
    }
    
    smallestCommons([1,5]);
  • 相关阅读:
    修改 dll
    SQLServer中char、varchar、nchar、nvarchar的区别:
    关于破解的一点心得
    asp.net 操作XML
    jquery autocomplete
    【转】height,posHeight和pixelHeight区别
    异常处理 Access to the path is denied
    asp.net 获得客户端 mac 地址
    cmd 跟踪路由
    Excel 宏
  • 原文地址:https://www.cnblogs.com/fffangrui/p/6114107.html
Copyright © 2011-2022 走看看