STL power() 计算一个数的n次幂
2016-07-27 09:20
274 查看
计算一个数的n次幂
STL计算x的n次幂的函数实现原理:用非递归的二分法比如
x^29 = x^1 * x^4 * x^8 * x^16; 29 = (11101)B
也就是把指数转换为二进制的数,然后从低位到高位依次相乘即可。时间复杂度为O(logn)。
为了避免低位很多零的情况,先过滤低位的0
源码如下:
template <class T, class Integer, class MonoidOperation> T power(T x, Integer n, MonoidOperation op) { if (n == 0) return identity_element(op); else { while ((n & 1) == 0) {//过滤低位的0 n >>= 1; x = op(x, x); } T result = x; n >>= 1; //右移动1位,相当于除以2 while (n != 0) { x = op(x, x); if ((n & 1) != 0) //最后一位是1,是0就不用乘啦! result = op(result, x); n >>= 1; //计算下一位 } return result; } }
相关文章推荐
- 浅析STL中的常用算法
- STL区间成员函数及区间算法总结
- c++ STL容器总结之:vertor与list的应用
- C++在成员函数中使用STL的find_if函数实例
- 关于PowerDesigner初体验的使用介绍
- 关于STL中list容器的一些总结
- 关于STL中的map容器的一些总结
- 浅析stl序列容器(map和set)的仿函数排序
- STL list链表的用法详细解析
- stl容器set,map,vector之erase用法与返回值详细解析
- STl中的排序算法详细解析
- 关于STL中vector容器的一些总结
- 关于STL中set容器的一些总结
- 简单说说STL的内存管理
- STL与泛型编程(1)---模板
- CppUtest发现的STL容器内存泄漏问题
- STL中算法
- win8系统蓝屏提示DRIVER POWER STATE FAILURE的原因及两种解决方法
- usb接口只读原理及应用
- CentOS 5.x 默认启动的服务内容