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]);
  • 相关阅读:
    C#中 @ 的用法
    ASP.NET页面间传值
    ASP.NET中常用的文件上传下载方法
    把图片转换为字符
    把图片转换为字符
    JavaScript 时间延迟
    Using WSDLs in UCM 11g like you did in 10g
    The Definitive Guide to Stellent Content Server Development
    解决RedHat AS5 RPM安装包依赖问题
    在64位Windows 7上安装Oracle UCM 10gR3
  • 原文地址:https://www.cnblogs.com/fffangrui/p/6114107.html
Copyright © 2011-2022 走看看