二进制幂--求解a^n问题

来源:互联网 发布:学哪种编程语言好? 编辑:程序博客网 时间:2024/06/01 09:28

思考:站在程序的角度看,如何快速计算出这里写图片描述 的值?
1. 第一种方法:写一个for循环,循环13次,每次让前一个值乘以a.即可得出结果.(计算12次)
2. 使用二进制幂算法 , 只需要5次计算过程


二进制幂的计算过程:
首先将13使用二进制表示:1101,然后建立表格,第二行的第一个值为a(不用计算),
后面的每个单元格计算方式:

  • 如果所求单元格对应的二进制位为1,:那该单元格的值=前一单元格的值的平方*a
  • 若所求单元格对应的二进制位为0,那么所求单元格的值=前一单元格的值的平方
    这里写图片描述
程序伪代码:LeftRightBinaryExponentiation(a,b(n))//用从左到右二进制幂算法计算a^n//输入:一个底数a和二进制位bi,...,b0的列表b(n),这些位来自于一个正整数n的二进制展开式//下面的 <- 表示赋值过程product <- afor i <- (I-1) downto 0 do    product <-  product * product    if b[i] = 1 product <-  product * a return product

从伪代码看,二进制幂算法计算次数M(n)明显减少,
(b-1)<=M(n) <= 2(b-1),其中b代表二进制位的长度.考虑到这里写图片描述,可以知道从左到右二进制幂算法的效率时对数级的.

0 0