首页 > 编程语言 > 详细

算法模版:非递归快速幂算法详解

时间:2015-03-25 13:29:58      阅读:308      评论:0      收藏:0      [点我收藏+]
 1 // 计算a^b
 2 long long quick_power(long long a, long long b) {
 3     long long result = 1;
 4     while (b) {
 5         if (b & 1) result *= a; // 判断最后一位二进制位数是否为1
 6         b >>= 1; // 右移位一位
 7         a *= a; // a在下一位的基数应该是上一位的a倍
 8     }
 9     return result;
10 }

算法解释:

比如a=2, b=15

那么正常应该是有15个2相乘

这个优化算法中是这么做的,15 = 8 + 4 + 2 + 1

那么简化为2^8 * 2^4 * 2 ^ 2 * 2^1

那么我们可以根据二进制每一位的值来做这个算法。

让a作为基数,在循环中代表这次循环中如果应该计算的话应该乘多少进去,即上例中,a在每次循环中分别是2, 4, 16, 32, 即2^1 2^2 2^4 2^8。

我们来判断b的二进制数的最后一位是不是为1来决定是否算进去这位。

算法模版:非递归快速幂算法详解

原文:http://www.cnblogs.com/laiy/p/4365226.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!