【算法】快速幂

算法-快速幂


前置知识
  • 倍增

思路

我们要求 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;
}

练习
相关推荐
变量未定义~5 分钟前
字符串哈希匹配字符串
数据结构·算法·哈希算法
lzh200409195 分钟前
手搓一个简易 Linux 进程池:巩固进程知识
linux·c++
周末也要写八哥8 分钟前
浅谈二叉树的深度优先搜索(DFS)算法
算法·深度优先
basketball61612 分钟前
C++ 的 const 相关知识点总结
开发语言·c++
y = xⁿ20 分钟前
20天速通LeetCodeday17:一维动态规划
算法
bnmoel24 分钟前
数据结构深度剖析栈与队列:结构、边界实现与进出操作全解析
c语言·数据结构·算法··队列
WL_Aurora26 分钟前
Python 算法基础篇之查找算法(一):顺序查找、二分查找与插值查找
开发语言·python·算法
Luhui Dev28 分钟前
几何作图完全指南:从基础构造到三角形、圆与多边形
人工智能·数学·大角几何·luhuidev
阿文的代码库32 分钟前
对于C++中push_back的原理介绍与分析
开发语言·c++
ChoSeitaku36 分钟前
06_可变参数_递归_类和对象_封装
java·数据结构·算法