快速算底数的n次幂,时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。例如:

例如

11的二进制是1011
因此,我们将a¹¹转化为

//base为底数
int fastpow(int base, int n, int mod){int ans = 1;while (n) {//指数二进制位为1时,乘入结果if (n & 1) ans *= base % mod;//增加次方base *= base;n >>= 1;}return ans % mod;
}

取模是避免溢出,因为幂运算结果可能太大。同模原理:

A*B % C = (A%C * B%C)%C
(A+B)%C = (A%C + B%C)%C

矩阵快速幂:底数换成矩阵,同样乘法运算。例题:
https://leetcode-cn.com/problems/n-th-tribonacci-number/

泰波那契序列 Tn 定义如下: 
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

示例 1:
输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4

示例 2:
输入:n = 25
输出:1389537

提示:
0 <= n <= 37
答案保证是一个 32 位整数,即 answer <= 2^31 - 1。

class Solution {
public:int tribonacci(int n) {if (n == 0) {return 0;}if (n <= 2) {return 1;}vector<vector<long>> q = {{1, 1, 1}, {1, 0, 0}, {0, 1, 0}};vector<vector<long>> res = pow(q, n);return res[0][2];}vector<vector<long>> pow(vector<vector<long>>& a, long n) {//单位矩阵vector<vector<long>> ret = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};while (n > 0) {if ((n & 1) == 1) {ret = multiply(ret, a);}n >>= 1;a = multiply(a, a);}return ret;}vector<vector<long>> multiply(vector<vector<long>>& a, vector<vector<long>>& b) {vector<vector<long>> c(3, vector<long>(3));for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];}}return c;}
};

【C++】快速幂与矩阵快速幂相关推荐

  1. 快速幂或者矩阵快速幂

    快速幂或者矩阵快速幂在算大指数次方时是很高效的,他的基本原理是二进制,下面的A可以是一个数也可以是一个矩阵(本文特指方阵),若是数就是快速幂算法,若是矩阵就是矩阵快速幂算法,用c++只需把矩阵设成一个 ...

  2. 二分幂,快速幂,矩阵快速幂,快速乘

    前言 二分幂,快速幂,矩阵快速幂在算大指数次方时是很高效的. 求 a^n 的值是多少?n是1到10^18次方的一个整数. 求一个数的n次方,朴素的算法就是直接for循环,一遍一遍的乘,a*a*a*a* ...

  3. python【数据结构与算法】快速幂and矩阵快速幂取模(看不懂你来打我)

    文章目录 1 解释快速幂 2 代码(这里就不考虑指数为小于0的情况了) 3 下面是矩阵快速幂,区别只是底数换成了矩阵 1 解释快速幂 传统的幂运算,是对底数进行连乘,时间复杂度为o(n),例如:2^1 ...

  4. 快速幂、矩阵快速幂、快速乘法

    快速幂 快速幂是我们经常用到的一种算法,快速幂顾名思义就是快速的幂运算.我们在很多题目中都会遇到幂运算,但是在指数很大的时候,我们如果用for或者是pow就会超时,这时候就用到了快速幂. 快速幂的原理 ...

  5. 数论-快速幂、矩阵快速幂、慢速乘

    文章目录 快速幂 矩阵快速幂 慢速乘 例题 HDU-2817 HDU-3117 XUJC-1395 快速幂 首先幂运算 a n a^n an就是 n n n个 a a a相乘,我们可以直接调用库函数 ...

  6. 快速幂与矩阵快速幂学习笔记

    首先附上我学习快速幂的链接 https://blog.csdn.net/qq_19782019/article/details/85621386 并从中摘抄了一些有用的东西记录下来作为总结 1.&qu ...

  7. 快速幂、快速乘、矩阵快速幂

    文章目录 一 快速幂 模板 模板例题 二 快速乘 模板 三 矩阵快速幂 例题 模板题 应用题1 应用题2 一 快速幂 目的:当我们在求f(x) = a ^ x % mod时,f(x)的结果会呈指数型增 ...

  8. 快速幂和矩阵快速幂详解+模板

    1.快速幂 一般的,我们都知道求只需要连续乘3次2就能得到,那么等于多少呢?其实这个一很简单,不就是13个2相乘吗,连续乘13次2就行了.那么,呢? 是不是要连续乘100次.1000次,我们将这类问题 ...

  9. 数论(二)快速幂 (矩阵快速幂)等比数列求和 最大公因数和最小公倍数

    快速幂 1.快速幂用于快速计算a的b次方,时间复杂度是O(log2b) 2.用于a和b比较大小的情况,常用的快速幂是带模快速幂 3.分析一个例子: 3 15=?  15=(1111)2 3e1 * ...

  10. 蓝桥杯 算法提高 递推求值(矩阵快速幂)详解

    传送门 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3 ...

最新文章

  1. SAP CAR 的主要优势
  2. jQuery插件scrollToTop 4行代码实现网站回到顶部
  3. 【Daily Scrum】12-08
  4. .netcore发布时指定服务器的系统类型
  5. oracle发生重启动的介绍
  6. Flutter ListView子项长按浮层菜单实现
  7. 【2017年蓝桥杯Java-B组省赛题解】
  8. 互动课件制作 html,如何实现多图版互动式图片课件的制作
  9. bbed修改表记录内容系列三
  10. 小武与GPU与pytorch的bug 还有反向传播
  11. ⅴs2010控件名称及用方法_VS2010 用户自定义工具箱控件的制作方法
  12. plsql developer工具栏按钮不见了解决办法
  13. 在环仿真有两种,一种是软件在环仿真SITL,还有一种是硬件在环仿真HITL。
  14. 数据分析的绩效应该这样来考核
  15. 2021国开计算机应用基础形考任务答案,2021电大计算机应用基础形考试题答案解析.doc...
  16. bootstrap table固定列导致复选框失效的解决方法
  17. 511遇见易语言取文件尺寸时间文件更名文件是否存在
  18. TCP/UDP以及端口协议功能
  19. 区块链支付方式的未来发展
  20. 交互设计专业书籍推荐

热门文章

  1. js 下载文件、音频、视频
  2. searchbar.wxss源代码
  3. 谷歌浏览器无法定位程序输入点解决方法
  4. Auto.js微信抢红包脚本
  5. 极域电子教室2016破解版
  6. 创建CrossApp工程
  7. 【cuda】——npp/cuda图像预处理resize+norm对比
  8. 基于用户的协同过滤算法 1
  9. java 定时任务 单元测试_介绍java 定时任务最简单的3种实现方法
  10. 智慧城管三维可视化决策系统平台(数字孪生)—解决方案开发案例