js 求解最大公约数和最小公倍数

原理

最大公约数

两个数的最大公约数可以用辗转相除法.
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21( 252 = 21 × 12;105 = 21 × 5 );因为 252 − 105 = 21 × (12 − 5) = 147 ,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。

最小公倍数

两个自然数的最大公约数与它们的最小公倍数的乘积等于这两个数的乘积。
例如12和16,(12,16)=4,[12,16]=48,有4×48=12×16,即(12,16)× [12,16]=12×16。

代码

//最大公约数
function gys(x, y) {
    var max, min, temp;
    max = x > y ? x : y;
    min = x < y ? x : y;
    if(x == 0 || y == 0){
        return max;
    }
    while (max % min) {
        temp = max % min;
        max = min;
        min = temp;
    }
    return min;
  }
//最小公倍数
function gbs(x, y) {
    return x * y / gys(x, y);
}
console.log('最大公约数:' + gys(252, 105))//最大公约数:21
console.log('最小公倍数:' + gbs(252, 105))//最小公倍数:1260
//最大公约数的递归算法
function gys2(m, n) {
    return m % n == 0 ? (n) : (gys2(n, m % n));
}

//数组的最小公倍数
function  arrGbs(arr){
    var midNum = 1;
    for(var i = 0;i < arr.length;i++){
        midNum = gbs(arr[i],midNum);
    }
    return midNum;
}
console.log(arrGbs([2,3,7,16]))//336
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基本概念 如果数a能被数b整除,a就叫做b的倍数,b就叫做a额约数。几个整数中公有的约数,叫做这几个数的公约数;其...
    海人为记阅读 744评论 0 0
  • 基本概念 因数 :若A=m×n,则称m,n是A的因数;A是m,n的倍数 一个数的最大因数和最小倍数都...
    AQ王浩阅读 2,183评论 0 4
  • 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,...
    Mr_chong阅读 2,042评论 0 5
  • 求最大公约数,这题听起来很简单。 最小公倍数:  两个或多个[整数]公有的倍数叫做它们的公倍数,其中除0以外最小的...
    siriusing阅读 5,001评论 0 1
  • 一. 基本概念: 如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数。约数和倍数都表示两个整数的关系,不能单...
    挽弓如月_80dc阅读 1,702评论 0 2