当前位置: 首页 > news >正文

C++ 快速幂算法

我们思考一个问题我们怎么计算a^{n}???

暴力算法当然是遍历for循环  循环n遍 但是这样时间复杂度就是O(n) 效率太低了

有没有更简单的办法?

答案是有的 就是快速幂的算法

比如我们要算a^{8}我们可以

 这样我们就只用计算4次就可以了

但是如果n是奇数次方怎么办?

如果是n奇数 我们可以把a存下来 计算a^{n-1}

a^{n-1}就是偶数了 这样我们就可以把时间复杂度降低到O(logn)

我们来看一个实际应用 斐波那契数列

我们当然可以用动态规划取写它 同时

 F(n)=

化简一下 

F(n)=

 

F(1)  F(0)是已知的 我们只用求  就可以了  这个矩阵的n次方 我们就可以用上快速幂的代码了

最后 代码奉上

class Solution
{
public:// 普通快速幂 a的n次方long long fastPower(long long a, long long n) {long long res = 1;while (n > 0) {if (n & 1)//判断n是不是奇数{res *= a;}a *= a;n >>= 1;//n/2}return res;}
private:int record = 1;
};

相关文章:

  • 记录学习的第三十天
  • 配置openjdk调试环境
  • AI大模型-window系统CPU版安装anaconda以及paddle详细步骤-亲测有效
  • 【Spring】AutoConfigureOrder与Order注解的区别与使用方式
  • 人工神经网络学习——前馈神经网络的反向传播算法(待完善
  • Python简介与入门
  • Git,本地上传项目到github
  • 力扣每日打卡17 49. 字母异位词分组 (中等)
  • 【STM32单片机】#11 I2C通信(软件读写)
  • Sharding-JDBC 系列专题 - 第七篇:Spring Boot 集成与 Sharding-Proxy 简介
  • Spark2 之 memorypool
  • 417. 太平洋大西洋水流问题
  • 小程序 日历选择 支持前后月份切换
  • C++中的引用:深入理解与实用示例
  • 【DeepSeek 学习推理】Llumnix: Dynamic Scheduling for Large Language Model Serving
  • 实验七 ADC0804 数字电压表
  • 【每天一个知识点】大模型的幻觉问题
  • 访问Maven私服的教程
  • leetcode:1295. 统计位数为偶数的数字(python3解法)
  • JAVA设计模式——(二)组合模式
  • 山东省淄博市委原常委宋振波被“双开”
  • “小时光:地铁里的阅读”摄影展开幕,嘉宾共话日常生活与阅读
  • 竹子砍了地却种不上,贵州赤水被指“整改复耕”存形式主义
  • 经济参考报:安全是汽车智能化的终极目标
  • 价格周报|本周生猪均价环比上涨,交易均重继续上升
  • 冲线!“天工”夺得全球首个人形机器人半马冠军