快速幂讲解

 

现在给出一个问题  :计算a的b次方的值

 

我们很容易想到用一个循环一直累乘就能完成这个计算  

快速幂讲解

 

但当a和b很大的时候 这种写法不仅会造成溢出,而且计算速度非常慢,时间复杂度为O(n)

 

 

 

下面给出另一种写法,“快速幂”快速幂顾名思义就是快速的计算底数的n次幂,它的时间复杂度为O(log₂N)

大大提高了计算速度。

 

接下来 我们来讲解它的原理:对于我们所要求的a^b中的b,其实是可以按照二进制被拆分的。

任何数其实都是可以用k个2的n次方相加来表示的(k和n为常数)

例如a^11 = a^(2^0+2^1+2^3),11的二进制是1011,11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1(以前我们需要计算11次,现在只需要计算三次),这就大大减少了我们的计算时间。

因为运用了二进制,所以我们很容易想到用强大的位运算符 , 这里将用到两个运算符&和 >> ,&是取位运算符,>>是右移运算符,由此我们给出代码。。。

快速幂讲解