zoukankan      html  css  js  c++  java
  • JavaScript 求最大公约数

    面试被问到了,太菜了,不会写,特来学习记录下。

    辗转相除法

    辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
    例如,求(319,377):
    ∵ 319÷377=0(余319)
    ∴(319,377)=(377,319);
    ∵ 377÷319=1(余58)
    ∴(377,319)=(319,58);
    ∵ 319÷58=5(余29)
    ∴ (319,58)=(58,29);
    ∵ 58÷29=2(余0)
    ∴ (58,29)= 29;
    ∴ (319,377)=29。

    代码如下:

    function fun(a, b) {
      if (a % b === 0) {
        return b
      }
      return fun(b, a % b)
    }
    console.log(fun(319, 377)) // 29
    

    更相减损法

    也叫更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。
    第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
    第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
    则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
    其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。所以更相减损法也叫等值算法。
    例1.用更相减损术求98与63的最大公约数。
    解:由于63不是偶数,把98和63以大数减小数,并辗转相减:
    98-63=35
    63-35=28
    35-28=7
    28-7=21
    21-7=14
    14-7=7
    所以,98和63的最大公约数等于7。
    这个过程可以简单的写为:
    (98,63)=(35,63)=(35,28)=(7,28)=(7,21)=(7,14)=(7,7)=7.
    例2.用更相减损术求260和104的最大公约数。
    解:由于260和104均为偶数,首先用2约简得到130和52,再用2约简得到65和26。
    此时65是奇数而26不是奇数,故把65和26辗转相减:
    65-26=39
    39-26=13
    26-13=13
    所以,260与104的最大公约数等于13乘以第一步中约掉的两个2,即1322=52。
    这个过程可以简单地写为:
    (260,104)(/2/2) =>(65,26)=(39,26)=(13,26)=(13,13)=13. (22) => 52

    代码如下,省去了判断双方都为偶数的部分,直接开始,类似上面的例1:

    function fun(a, b) {
      if (a === b) {
        return b
      }
      if (a > b) {
        a = a - b
      } else {
        b = b - a
      }
      return fun(a, b)
    }
    console.log(fun(319, 377)) // 29
    
  • 相关阅读:
    SharePoint 2013 商务智能报表发布
    sharepoint designer web 服务器似乎没有安装microsoft sharepoint foundation
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 入门教程之创建及修改母版页
    SharePoint 2013 入门教程之创建页面布局及页面
    SharePoint 2010 级联下拉列表 (Cascading DropDownList)
    使用SharePoint Designer定制开发专家库系统实例!
    PL/SQL Developer 建立远程连接数据库的配置 和安装包+汉化包+注册机
  • 原文地址:https://www.cnblogs.com/cqkjxxxx/p/14975551.html
Copyright © 2011-2022 走看看