【算法】快速幂

算法-快速幂


前置知识
  • 倍增

思路

我们要求 a n a^n an。

简单的方法是 a n = a n − 1 ⋅ a a^n=a^{n-1}\cdot a an=an−1⋅a

但是我们不妨使用倍增的思想

若 2 ∣ n 2\mid n 2∣n,则 a n = a n 2 2 a^n={a^{\frac n 2}}^2 an=a2n2

若 2 ∤ n 2\nmid n 2∤n,则 a n = a ⌊ n 2 ⌋ 2 ⋅ a a^n={a^{\lfloor{\frac n 2}\rfloor}}^2\cdot a an=a⌊2n⌋2⋅a


算法参数
  • 时间复杂度: O ( log ⁡ n ) O(\log n) O(logn)
  • 空间复杂度: O ( 1 ) O(1) O(1)

实现代码
  • 基础版本
cpp 复制代码
int pow(int x,int y){
    int res=1;
    while (y){
        if (y&1) res=res*x;
        x=x*x;
        y>>=1;
    }
    return res;
}
  • 取模版本
cpp 复制代码
int pow(int x,int y,int M){
    int res=1;
    while (y){
        if (y&1) res=res*x%M;
        x=x*x%M;
        y>>=1;
    }
    return res;
}

练习
相关推荐
heisd_15 小时前
KNN 算法和 K means算法和 Q-Learning 算法(简单的理解)
算法
闻缺陷则喜何志丹6 小时前
【几何】二维矢量叉乘、正弦定理、三维叉乘及鞋带公式(高斯面积公式)
c++·数学·正弦定理·鞋带公式·矢量叉乘·简单多边形面积
liu****6 小时前
15.自定义类型:联合和枚举
数据结构·c++·剪枝
冉佳驹6 小时前
C++ ——— 动态内存管理和泛型编程的核心机制
c++·delete·模板·new·operator new·operator delete·定位 new
程序猿编码6 小时前
恶意软件分析工具:ELF二进制文件的感染与分析原理(C/C++代码实现)
c语言·c++·网络安全·信息安全·elf·shellcode
资深低代码开发平台专家6 小时前
通用编程时代正在向专用化分层演进
java·大数据·c语言·c++·python
Wild_Pointer.6 小时前
项目实战:使用QCustomPlot实现多窗口绘制数据(支持GPU加速)
c++·qt·gpu算力
TL滕6 小时前
从0开始学算法——第六天(进阶排序算法)
笔记·学习·算法·排序算法
TL滕6 小时前
从0开始学算法——第六天(进阶排序算法练习)
笔记·python·学习·算法·排序算法
課代表6 小时前
正弦函数与椭圆的关系
数学·算法·几何·三角函数·椭圆·正弦·周长