几个简单的对数增长阶算法

本文介绍了三个数学算法的对数增长阶实现,包括基于欧几里得算法的最大公约数、素数检测(利用费马小定理)以及斐波那契数的“俄罗斯农名方法”。通过JavaScript重新实现这些算法,有助于加深对对数级复杂度理解。
摘要由CSDN通过智能技术生成

数学算法对数增长阶实现

最近在看scip,不得不说,这本书的确是经典之作,每天抽出时间看一会上面所讲的东西,对我这样编程算法基础薄弱的人,也是受益匪浅。所以想把上面的一些好的算法用自己熟悉的javascript重新写一遍,加深记忆。

最大公约数

两个整数a和b的最大公约数(GCD)定义为能除尽这两个数的那个最大的整数。在SCIP中提到了一种基于欧几里得算法的对数增加阶的实现。该算法的思想是:如果r是a除以b的余数,那么可以有结论r和b的公约数等于a和b的公约数。基于该理论,有如下实现

function GCD(a,b){
   
    let gcd = 0;
    if(b === 0){
      gcd = b;
    }
    else{
      let r = a%b;
      GCD(b,r);
    }
    return gcd;
}

增长阶是log(n)底数是1.6180。

素数检测

素数检测是数学中一个经久不衰的话题,同样,本文也只讨论素数检测的对数级复杂度的算法。
关于这个算法,需要介绍一下这个算法的核心理论:

费马小定理推论:对于一个整数n,取另外一个整数a满足a< n,计算a^n%n是否等于n,如果结果不是a,那肯定不是素数,相反,那么n是素数的概率就很大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值