对于幂运算 a^b,最原始的方法是用for循环一遍:

double powRaw(double base,int n)
{double r = 1;for(int i=1;i<=n;i++)r = r*base;return r;
}

考虑如下下面的事实:

对于r = a^b,若b为偶数,那么r = a^(b/2)·a^(b/2);若b为奇数,那么r = a^((n-1)/2)·a^((n-1)/2)·a。利用这个事实可以得到如下的递归解法:

double pow(double base,int n)
{if (n == 0)return 1;if (n == 1)return base;double t = pow(base,n >> 1);if (n & 0x1) return t*t*base;elsereturn t*t;
}

另外,b用二进制表示,那么a^b可以看到r = a^(1011) = a^(1000)·a^(10)·a^(1),那么可以得到其非递归算法如下:

double power(double base,unsigned int n)
{double  r = 1;while(n){if (n & 0x1)r *= base;n = n >> 1;base *= base;}return r;
}

参考文章:

http://blog.csdn.net/prstaxy/article/details/8740838

幂运算的O(lgn)算法相关推荐

  1. 如何高效进行模乘、模幂运算?——蒙哥马利算法(Montgomery Algorithm)从入门到精通

    蒙哥马利算法(Montgomery Algorithm)从入门到精通 ​ 加密算法中,模运算(包括模乘.模幂运算)是难以避免的,如何高效地进行模运算,是提高算法效率的一个关键. 直观的想法 ​ 在数学 ...

  2. 幂运算 数组_Super Pow:如何高效进行模幂运算

    点击上方蓝字设为星标 东哥带你搞定算法~ 今天来聊一道与数学运算有关的算法题目,LeetCode 372 题 Super Pow,让你进行巨大的幂运算,然后求余数. int superPow(int ...

  3. 《算法基础》——2.3 求幂运算

    本节书摘来自华章计算机<算法基础>一书中的第2章,第2.3节,作者:(美)罗德·斯蒂芬斯(Rod Stephens)著,更多章节内容可以访问云栖社区"华章计算机"公众号 ...

  4. C++modular exponentiation模幂运算的实现算法(附完整源码)

    C++modular exponentiation模幂运算的实现算法 C++modular exponentiation模幂运算的实现算法完整源码(定义,实现,main函数测试) C++modular ...

  5. 模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)

    1.什么是模幂运算问题 给出a, k, mod 计算ak(%mod)a^k (\%mod)ak(%mod)的值 k是一个非常大的正整数(超过1e7) 附,一个可以提交的地方: leetcode 372 ...

  6. 快速幂算法c语言求a的n次方,快速幂运算模板(求n^k以及前几位或后几位)

    计算n^k的结果 步骤: 1.把n由十进制转换为二进制,按二进制来计算(最后结果还是一样的) 2.把n由二进制转换为2^k相加的形式 先举个例子: 求5^22: 接着就可以很好地理解了 O(logn) ...

  7. JAVA:实现binary exponentiation二进制幂运算算法(附完整源码)

    JAVA:实现binary exponentiation二进制幂运算算法 package com.thealgorithms.divideandconquer;public class BinaryE ...

  8. python pow函数——幂运算 快速幂算法实现思路

    说明 python 内置pow函数用于实现幂的运算,在这里我使用的是快速幂算法实现pow函数功能. 快速幂 快速幂算法本质上基于的是分治思想. 优点:其时间复杂度为 O (log₂N), 与暴力遍历时 ...

  9. Modular_exponentiation模幂运算

    https://en.wikipedia.org/wiki/Modular_exponentiation 蒙哥马利(Montgomery)幂模运算是快速计算a^b%k的一种算法,是RSA加密算法的核心 ...

  10. 大数运算(8)——大数幂运算

    大数幂运算的实现有了前面的大数乘法算法做铺垫,就是调用乘法函数,来循环去自乘,幂指数相应减1,直到幂指数变为0时结束. 下面是C语言代码实现: #include<stdio.h> #inc ...

最新文章

  1. Java中的ClassLoader和SPI机制
  2. mysql权限表整理
  3. linux shell sshpass 远程服务器 批量修改密码
  4. c++性能优化之Profiler
  5. Ubuntu 16.04 安装 Wireshark分析tcpdump的pcap包——sudo apt install wireshark-qt
  6. 鸿蒙系统突破,华为解锁新成就!新系统用户突破1亿,鸿蒙系统也传来了新消息...
  7. IE浏览器导出问题。。好要命
  8. 鸿蒙os首批适配机型,鸿蒙OS正式版首批名单曝光,适配速度让人意外,8款机型恭喜了...
  9. [渝粤教育] 新乡医学院 医学免疫学 参考 资料
  10. leetcode238 除本身以外数组的乘积
  11. 简化Java中的异常处理
  12. SQLSERVER 清除链接历史记录
  13. go home(2)-supprise
  14. 2021考研王道计算机408
  15. java统计代码行数
  16. 药品数据查询系统工具(非付费官网50个)
  17. 网际风全推数据接口_网际风千钧版 飞狐配套全推接口最新版(2013年5月10更新)...
  18. 京东/拼多多淘客小程序跳入路径
  19. 自定义控件ViewGroup上下滑动
  20. Connection terminated as request was larger than XXX

热门文章

  1. 如何在手机或平板上编写代码?
  2. 把抽奖活动写成一篇技术博客是怎样一种体验
  3. Android 中使用AlarmManager设置闹钟详解
  4. python大作业数据_python 爬虫初探和简单数据分析及可视化,帮学妹写个大作业...
  5. 图片中加入超链接html代码,html网页超链接代码 怎样用HTML代码在图片插入超链接...
  6. python开发桌面时钟_python+PyQT实现系统桌面时钟
  7. css控制表格剧中,如何通过css设置表格居中
  8. nginx配置多个域名使用同一个端口
  9. 刚斩获头条美团的offer,Java开发面试题详解(带答案)
  10. 第2.2节 串行SPI接口控制PE4312数控衰减器