js求最大公约数原理解析

 

(function(){

    function Count(a,b){

        if(b == 0){
          return a;
        }else{
            var c = a%b;
            a=b;
            b=c;
            return Count(a,b)
        }

    }

    window.Count = Count;

})();

结果:

分析:

    以上是使用辗转相除法求最大公约数.它背后的计算原理到底是什么样子呢,为什么这样几笔就能计算出最大公约数.首先我们可以明确一个规律,如果有两个数a和b,b如果为0,那么a和b的最大公约数一定是a.所以我们要想尽各种办法将两个数变成其中一个数为0的情况.假如现有两个数42和18,它们存在一个最大公约数m.42可以转化为18+24,由于42能整除m,18能整除m,那么24也能整除m.此时就可以由求42和18的公约数转换成求24和18的公约数.按照以上规则继续转换成18和6,12和6,6和6,6和0.到了此时求48和18的最大公约数就转化成了求6和0的最大公约数.

    在以上的Count函数当中a%b发挥了巨大的作用:

      1.假如a<b,a%b等于a,经过上面函数的一转换,能够保证a永远是最大值

      2.假如a>b但不整除,那么a%b就是a与b之间的差值,接下来就转换成了求b与差值之间的最大公约数

      3. 假如a能整除于b,它就直接给你转换成了求b和0的最大公约数

Count函数的整个过程就是不断的将两个数转换,直到b等于0.

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值