zoukankan      html  css  js  c++  java
  • js实现欧几里得算法

    概念
    在数学中,辗转相除法,又称欧几里得算法(英语:Euclidean algorithm),是求最大公约数的算法。

    证明
    首先假设有两个数a和b,其中a是不小于b的数,记a被b除的余数为r,那么a可以写成这样的形式:
    a = b*q + r
    假设a和b的一个约数为u,那么a和b都能被u整除,即:

    a = su
    b = tu
    带入原式可得

    su = (tu)q + r
    r = su - (tu)
    q
    r = u*(s-tq)
    所以 u 也是r 的公约数,即

    a和b的约数也整除它们的余数r,所以a和b的任一约数同时也是b和r的约数。

    同理可证明b和r的任一公约数也是a的公约数。
    假设b和r的任一公约数为 v,则有:

    b = mv
    r = nv
    带入原式可得

    a = (mv)q + nv
    a = v
    (mq+n)
    所以a和b的约数组成的集合与b和r的约数集合是相等的,那么a和b的最大约数和b和r的最大约数也相等。

    实现
    用js实现代码如下:

    function gcd(a,b){
    let max = a>b?a:b;
    let min = a>b?b:a;
    let r = max%min;
    if(r==0){
    return min;
    }else{
    return gcd(min,r)
    }
    }
    简化版本如下:

    function gcd(a,b){
    return b===0?a:gcd(b,a%b);
    }
    参考
    辗转相除法[维基百科]
    欧几里得算法求最大公约数的数学原理
    js实现欧几里得算法/辗转相除法

  • 相关阅读:
    对于“口袋精灵”单元测试
    12-17:项目进度
    12-15:项目进度
    12-14:项目进度
    12-13:项目进度
    12-12:项目进度
    12-11:项目进度
    12-10:项目进度
    12-9:项目进度
    12-6:项目进度
  • 原文地址:https://www.cnblogs.com/renbo/p/9979934.html
Copyright © 2011-2022 走看看