快速幂,就是快速的计算底数的 n 次幂。

常规求法

int mi(int a, int b)
{int res = 1;while (b--){res *= a;}return res;
}

时间复杂度: O ( b ) O(b) O(b)

快速幂

例如 a 11 a^{11} a11:
a 11 = a ( 1011 ) 2 = a 2 0 + 2 1 + 2 3 = a 2 0 ⋅ a 2 1 ⋅ a 2 3 a^{11} =a^{(1011)_2} =a^{2^0+2^1+2^3} =a^{2^0}\cdot a^{2^1}\cdot a^{2^3} a11=a(1011)2​=a20+21+23=a20⋅a21⋅a23
又有
a 2 i = a 2 i − 1 ⋅ 2 = ( a 2 i − 1 ) 2 a^{2^i}=a^{2^{i-1}\cdot2}=(a^{2^{i-1}})^2 a2i=a2i−1⋅2=(a2i−1)2
我们可以使用位运算分解指数的每一位,同时求 a 2 i a^{2^i} a2i ,如果某一个二进制位是 1 1 1,比如 11 11 11 的第二位是 1 1 1,那么此时 i = 1 i=1 i=1 ,就将求好的 a 2 1 a^{2^1} a21 乘到 res 上去。

int qmi(int a, int b)
{int res = 1;while (b){if (b & 1) res *= a;a *= a;b >>= 1;}return res;
}

时间复杂度: O ( log ⁡ b ) O(\log b) O(logb),即指数的二进制位数。与常规求法相比有了极大地提高。

带有取模运算的写法:

int qmi(int a, int b, int p)
{int res = 1;while (b){if (b & 1) res = res * a % p;a = a * a % p;b >>= 1;}return res;
}

快速幂,快速计算底数的 n 次幂相关推荐

  1. 快速幂(快速幂取余)

    引入公式 (a*b) %c = ((a % c)*(b % c)) %c 普通求幂的解法 public static int pow(int x,int n) {int result = 1;for ...

  2. 快速幂----快速求解底数的n次幂

    目录 一.快速幂 1.问题的引入 2.快速幂的介绍 3.核心思想 4.代码实现 二.Pow(x, n) 1.题目描述 2.问题分析 3.代码实现 三.猴子碰撞的方法数 1.题目描述 2.问题分析 3. ...

  3. HDU4549(矩阵快速幂+快速幂)

    f(n)=a^f(n-1) + b^f(n-2):计算矩阵部分用矩阵快速幂:计算a的幂次和b的幂次用快速幂. #include<iostream> #include<algorith ...

  4. 【牛客每日一题】4.16 逆序对 ( 数学 , 排列组合 ,快速幂 , 快速乘 )

    [每日一题]逆序对 链接:https://ac.nowcoder.com/acm/problem/14731 来源:牛客网 题目描述 求所有长度为n的01串中满足如下条件的二元组个数: 设第i位和第j ...

  5. 如何快速入行云计算?云计算的学习要点有哪些?

    我国云计算产业获得迅猛发展,不仅阿里云.腾讯云.金山云三国鼎立烽火连天,华为云.京东云等其他一众大小云平台如雨后春笋,云计算人才的高薪前景可期. 近日,阿里云和腾讯云相继公布季度财报,其中阿里云营收9 ...

  6. chatgpt赋能python:Python加法表达式,快速简便的计算方式

    Python加法表达式,快速简便的计算方式 介绍 Python是一种可读性强.简洁.易于学习的编程语言,同时也是一种高级编程语言,由于其简洁性和可读性,越来越多的程序员们选择Python作为他们的工作 ...

  7. C++——计算x的n次幂

    C++实现计算x的n次幂 #include <iostream> using namespace std;class Calculator//创建计算类 {public:double ca ...

  8. 怎么用计算机计算e的n次方,Excel 计算e的n次幂:EXP函数

    EXP函数的功能是计算e的n次幂.EXP函数的语法如下: EXP(number) 其中,number参数为应用于底数e的指数.常数e等于2.71828182845904,是自然对数的底数.下面通过实例 ...

  9. 利用从左到右二进制幂算法计算二进制的幂(霍纳法则升级版,变治法)

    文章目录 题目描述 一.二进制幂的计算 二.题解 1.源代码 2.源程序测试 写在最后 题目描述 7.a.应用从左到右二进制幂算法来计算 a 17 a^{17} a17 本题目来源:<算法设计与 ...

最新文章

  1. R语言心得-分词包的安装
  2. 三种嵌入式web服务器(Boa / lighttpd / shttpd)的 linux移植笔记
  3. 经典面试题(44):以下代码将输出的结果是什么?
  4. python中sort和sorted区别_Python中的 sort 和 sorted的用法与区别
  5. Livejourmal是什么
  6. make clean指令出现问题
  7. C标准预定义实用的宏
  8. ES6知识整理(2)--变量的解构赋值
  9. vs2008软件测试实战 3 web test(1)
  10. java保存文件filedialog保存路径 文件名_FileDialog文件名过滤问题
  11. Python验证码识别处理实例
  12. c语言课程设计--太空战机,基于Funcode平台的软件课程设计
  13. 计算机多媒体教学一体机包括,学校使用多媒体教学触摸一体机应用效果的介绍...
  14. 如何修改计算机ip 地址子网掩码,如何查看和修改主机的ip地址和子网掩码
  15. 一个快速搭建微商城的方法
  16. python国内外研究现状-对当今Python 快速发展的研究与展望
  17. 使用 Windows XP 的外观风格
  18. 微风:什么是UI设计?
  19. python : 新概念英语 课文转为html
  20. Win10小娜关闭或删除进程

热门文章

  1. 页面窗口位置-scrollLeft和scrollTop
  2. Rockchip RK3588 kernel dts解析之WIFI/BT
  3. js时间戳与日期格式的相互转换
  4. 史上最详细最简单的冒泡排序,一学就会,一看就懂,一面试就懵!
  5. 【Android音视频开发】【014】Surface,SurfaceHolder,SurfaceView之间的关联
  6. nyaa镜像站 nyaa反向代理站
  7. java 获取默认网关_Java查找默认网关的网络接口
  8. 低层次的认知,是悲哀人生的始作俑者
  9. Duns Number为何会受到如此多关注?这几点理由足以让它发光!
  10. zc706 linux镜像,ZYNQ-7000 ZC706板BOOT文件由三个文件合 成