1.普通的求幂方法:

时间复杂度为O(n),对于比较大的数在1s限时内可能会TLE

int pow(int base,int p){
int ans=1; for(int i=1;i<=p;i++)
ans*=base; return ans;
}

2.快速幂:

时间复杂度为logn

(1)结合位运算

原理:指数p可转化为2进制形式

  则basep=basei(1)*2^0+i(2)*2^1+i(3)*2^2+……

      =basei(1)*2^0*basei(2)*2^1*basei(3)*2^2*……

当i(n)=0时相当于乘了1,也就相当于什么也没乘,而每次待乘的数都是base2^k,乘不乘由系数i(k+1)决定,但不管乘不乘,下一次待乘的数都是base2^(k+1)即base2*2^k也就是(base2^k)2

代码实现:

long long fastpow(long long base,long long p){
long long ans=1; while(p!=0){
if(p&1!=0)//如果这一位(二进制最后一位)为1,则乘上待乘的数(或P%2==1)
ans*=base; base*=base;
p>>=1;(或者p/=2)
} return ans;
}

(2)结合模运算

我们知道basep%d=(base%d)*(base%d)*(base%d)*……%d

        =(base%d)p%d

上代码:

 long long fastpowmod(long long base,long long p,long long d){
long long ans=1;
base%=d; while(p!=0){
if(p&1!=0)
ans=ans*base%d; base=base*base%d;
p>>=1;
}
          ans%=d;//0次方特判 return ans;
}

最新文章

  1. SpringMVC4零配置--web.xml
  2. synchronized的理解
  3. 一步一步学习Unity3d学习笔记系1.1
  4. web工程导入MyEclipse 就变成Java工程 ———— 解决方案
  5. kthread_stop引起的OOP
  6. 比较不错的一个ios找茬游戏源码
  7. Google code: Why ‘Everything up-to-date’ when pushing (git)
  8. easyui的datagrid组件,如何设置点击某行不会高亮该行的方式
  9. storyboard和xib的区别
  10. 用IDEA在Tomcat上部署项目
  11. python RE模块的使用
  12. 安装配置Kafka
  13. King 差分约束 判负环
  14. css实现div内一段文本的两端对齐
  15. Elastic Stack之kibana使用
  16. [CodeForces 1141A] Game 23
  17. pycharm中新建external tools
  18. spring事务传播
  19. FastDFS分布文件系统Java客户端集成
  20. TreeMap源码剖析

热门文章

  1. Codeforces Round #650 (Div. 3) A. Short Substrings
  2. HDU 1565 方格取数 状压dp
  3. 牛客编程巅峰赛S1第5场 - 青铜&amp;白银 A.凯撒密码(字符串)
  4. Dubbo从入门到实践
  5. 国产网络测试仪MiniSMB - 如何3秒内创建出16,000条UDP/TCP端口号递增流
  6. 实战交付一套dubbo微服务到k8s集群(6)之交付dubbo-monitor到K8S集群
  7. Hexo准备---Node.js、Vue
  8. Dapr是如何简化微服务的开发和部署
  9. cin 与 getline
  10. git commit guidelines