【算法】快速幂(JAVA版)

本文介绍了快速幂算法,一种用于高效计算幂函数的方法,通过将指数n分解为2的幂之和,将计算复杂度从O(N)降低到O(logN)。通过实例演示了如何利用二进制和位运算实现代码,适合处理大数幂运算问题。

目录

引言

一、什么是快速幂

1.的另一种计算方法

2.指数n的分解

二、代码实现

1.得到各个二进制位

2.得到每个

总结


ID:HL_5461

引言

首先提一个问题:如何计算 2 ^ n ?

对于这个问题,相信很多人心里第一个想法是循环n次,每个循环里都对原数乘2。

这的确是一个简单快捷的方法,复杂度也只有O(N)。但是如果2^n中,n等于一亿,甚至更多呢?此时我们将循环一亿次。所以,有没有一个更好的方法呢?

当然是有的,就是我们接下来将认识的快速幂算法,如果使用快速幂算法,当n为一亿时,我们只需循环27次就可以了。


一、什么是快速幂

1.a^n的另一种计算方法

先举个例子,对 a^n 当 n = 16 时。

用普通的方法,很显然,我们需要循环16次。但我们不妨换一个思路:

a^1 \times a ^1 = a^2
a^2 \times a^2 = a^4
a ^4 \times a^4 = a^8
a^8 \times a^8=a^{16}

对于上标n,我们使用每次翻倍的方法,直到n为16。这样的话,我们只要循环4次就行了,时间复杂度也由原来的O(N)减小到O(logN)。

就这么简单,本文到此结束(bushi)。

好吧,估计很多人会有疑问:这样的话,我们难道只能计算n为2的幂的情况吗?像n为27,n为41这种非幂的情况都算不了,这个算法岂不是很鸡肋?

当然不是,但在向后介绍之前,我们先明确这样一个事实:对于a^{n} (其中n可写成2^{n_{0}},即,2

的多少幂形式)的幂函数,我们可以用如上方法快速求出

接下来是n不是2的幂的情况:对于非2的幂的情况,我们都可将其拆为2的幂相加的情况。以n = 41,即 a^{41} 为例:

2^0 = 1 \bigstar
2^1 = 2
2^2 = 4
2^3=8 \bigstar
2^4 = 16
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是兰兰呀~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值