快速幂的学习
2016-02-12 15:56
225 查看
计算 S = a^n :
S = a * a * a * a......
= ( ( (a^2)^2)^2)......
n = 2^k1 + 2^k2 + 2^k3......
例如: 22 = 16+4+2 22的二进制数为:10110
那么: a^22 = a^16 * a^4 * a^2
S = a * a * a * a......
= ( ( (a^2)^2)^2)......
n = 2^k1 + 2^k2 + 2^k3......
例如: 22 = 16+4+2 22的二进制数为:10110
那么: a^22 = a^16 * a^4 * a^2
int pow(int a, int n) { int res = 1; while (n > 0) { if (n&1) res = res*a; //若二进制最低位为1, 则乘以 x*(2^i) a = a*a; //将x平方 n >>= 1; } return res; }
相关文章推荐
- HDFS邻近信息块BlockInfoContiguous
- PagerIndicator主题样式修改
- hdu 3047 Zjnu Stadium 带权并查集
- SlidingMenu的使用
- windows绘图-区域CRgn
- 水题 nbut1651 Red packet
- Docker多主机网络通信详解
- eclipse JavaEE版"javax.servlet.http.HttpServlet" was not found on the Java Build Path问题的解决办法
- 智慧北京开发第五天(上)
- javascript基础:字符串自动转换为数字类型
- 深度学习个人总结之四----自编码算法(AutoEncoder)
- java基础15迭代器
- 一个TCP/IP通信的实例
- POJ 2643 Election(map)
- poj 2709 贪心暴搜
- poj1654 Area
- nefuoj-1036:2月29日
- 【HDOJ】4347 The Closest M Points
- bzoj2588 Count on a tree dfs&主席树
- STL 源代码剖析 算法 stl_algo.h -- equal_range