快算求幂算法

来源:互联网 发布:阿里云取消实名认证 编辑:程序博客网 时间:2024/06/04 18:40

快速求幂运用平方乘方法是可能的。在传统算法中,只用乘法来模拟求幂,但是,快速求幂算法既运用平方也运用乘法。这种方法的主要想法就是把指数当作 比特 的二进制数来处理,例如 。通常x可以写作: 

 

注意,y是项的乘积。每一项既是1(如果相关的比特是0)也是(如果相关的比特是1)。也就是说,如果比特是1, 这一项包含在乘积当中;如果比特是0(乘以1是没有作用的),就不包含在乘法当中。图9-6给出了写这种算法的一般概念。我们可以对底数连续平方, 。如果相关的比特是0,这一项就不包括在乘法过程中;如果比特是1,就包括在乘法过程中。算法9.7反映的就是这两种观点。

算法9.7  平方乘算法的伪代码

 

算法9.7运用次迭代。在每次迭代中,它都要检验相应比特的值。如果比特的值是1,它就用前面结果的值乘以当前底数,再把这个底数平方,准备在下一次迭代中使用。注意,在最后一步中是不需要平方的(不用这个结果)。

例9.45

图9-7所示的就是运用算法9.7(为了更简单,没有显示模)计算的过程。在这种情况下,  。指数有5个比特。

在除最后一步的每一步中都要进行平方。只有相关比特是1,才进行乘法。图9-7所示的就是怎样逐渐累积y的值直到 的方法。solid boxes(坚实盒)表明乘法被忽略了并且前面的y值要带入下一步。表9-3所示的就是 值的计算过程,结果是y = 4。

表9-3   的计算

i

xi

乘法 (初始化:y = 1)  

平方(初始化:a = 17)

0

0

®

a = 172 mod 21 = 16

1

1

y = 1  ´ 16 mod 21 = 16   ®

a = 162 mod 21 = 4

2

1

y = 16  ´ 4 mod 21 = 1    ®

a = 42  mod 21 = 16

3

0

®

a = 162 mod 21 = 4

4

1

y = 1 ´ 4 mod 21 =  4         ®

 

复杂度  算法9.7运用 算术运算的最大值,其中 是比特中模的长度,所以算法的比特运算复杂度是 或呈多项式增长。

快速指数算法的比特运算复杂度是多项式的。

参考:http://book.51cto.com/art/200812/102582.htm

原创粉丝点击