博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速求幂
阅读量:6708 次
发布时间:2019-06-25

本文共 436 字,大约阅读时间需要 1 分钟。

只会写递归的,应该学学非递归的。 也是O(lgn)。

比如要计算$a^b$,把b写成二进制,假设$b=11_{(10)}=1011_{(2)}=2^3+2^1+2^0$;所以$a^{11}=a^{2^3+2^1+2^0}=a^{2^3}*a^{2^3}*a^{2^0}$。

这样我也就可以把每一位的乘积项先给算出来,也就是每一次循环算出$a^{2^n}=$a^{2^{n-1}}*a^{2^{n-1}}$。如果b的第n位二进制如果为1,结果就要乘以这个项,如果为0,则不需要;

1 int power(int a, int b) {2     int ans = 1;3     for (; b; b >>= 1) {4         if (b & 0x01) ans *= a;5         a *= a;6     }7     return ans;8 }

 

转载于:https://www.cnblogs.com/linyx/p/4020227.html

你可能感兴趣的文章
[.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程...
查看>>
【转】java中float与byte[]的互转 -- 不错
查看>>
[Ogre][地形][原创]基于OgreTerrain的地形实现
查看>>
shell登录模式及其相应配置文件(转)
查看>>
Puppet常识梳理
查看>>
web.config配置文件中的configSource属性
查看>>
发现一个国内牛逼的maven仓库,速度真的太快了
查看>>
Snmp配置
查看>>
使用java实现CNN的实战
查看>>
大白话系列之C#委托与事件讲解(二)
查看>>
linux下使用 du查看某个文件或目录占用磁盘空间的大小
查看>>
iCheck表单美化插件使用方法详解(含参数、事件等)
查看>>
IOS UIAlertController 使用方法
查看>>
MySQL存储过程 事务transaction
查看>>
93. [NOIP2001] 数的划分
查看>>
c++友元实现操作符重载
查看>>
LeetCode_Maximum Depth of Binary Tree
查看>>
MongoDB入门学习(一):MongoDB的安装和管理
查看>>
beans.factory.BeanCreationException beans.factory.annotation.Autowired(required=true)
查看>>
grep常见使用方法总结
查看>>