详解快速幂算法与快速幂取模

目录

一.什么是快速幂算法

二.快速幂算法的优势

三.快速幂算法的实现

四.快速幂取模

 五.例题


一.什么是快速幂算法

快速幂算法是一种快速计算a的b次方的算法,它通过利用指数的二进制表示来减少乘法和幂运算的次数(在这里,我们默认指数为正整数

二.快速幂算法的优势

1.时间复杂度低,相比传统幂运算算法(时间复杂度为O(n))快速幂算法的时间复杂度是O(log n)

2.结合快速幂算法的快速幂取模能够解决数据溢出问题,防止因为a的b次方的数据过大导致无法正确计算出取模后的结果

三.快速幂算法的实现

我们先利用举例来说明,假设我们要计算7的12次方,先来看一张图

指数12用二进制表达就是  1100  

7的12次方可以表示成 7^12=7^4 * 7^8=7^(2^2) * 7^(2^3)=7 ^(0*2^0 + 0*2^1+ 1*2^2 +1*2^3)

有了这样的思路,我们可以检查指数的最后一位二进制位是不是1

1.如举例的图片所示,我们先创建一个整形变量n=7再创建一个整形变量ret=1

2.12的二进制是1100,最后一位是0,无需操作,我们检索下一位,但是在此之前,我们需要把n=n*n,因为如果第二位是1的话,它代表的是7^2也就是7*7

2.第二位也是0,我们再次使n=n*n,现在n的值是7^4,然后检查下一位

3.第三位是1,代表7^4,我们进行ret=ret*7^4的操作,然后使n=n*n,现在n的值是7^8,再检查下一位

4.第四位也是1,代表7^8,我们使ret=ret*7^8,现在ret的值为1*7^4*7^8=7^12等于我们想要求的值

这就是快速幂算法的底层实现逻辑,这样看也许不太容易理解,我们现在把快速幂算法以代码的方式呈现(c语言)

(这里,我没有把此算法写成函数的形式)如果没有理解,可以自己画图看几遍,或者调试查看。

四.快速幂取模

1.快速幂取模就是计算(a^b)%m的算法,其时间复杂度低,且能够防止因为a的b次方的数据过大导致无法正确计算出取模后的结果。

2.在了解快速幂取模之前,我们需要先了解一个公式

(a*b)%m==[(a%m)*(b%m)]%m

3.快速幂取模就是在快速幂算法的基础上给a和ret多次取模

4.代码,例子是求(7^12)%10^4

 五.例题

求a的b次方的最后n位数,1≤a,b≤10^4,0<n<=4.

这道题如果使用常规的幂算法,那么数据必定会溢出,我们可以使用快速幂取模,比如说最后四位数就是a的b次方模上10^4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值