矩阵快速幂
在一些递推n很大的时候,很可能会超时,这样矩阵快速幂就派上用场了. 下面看一个非常经典的例题,斐波那契数列 已知f[1]=1,f[2]=1;F[n]=f[n-1]+f[n-2],给定n,求f[n]; 一看到这到题很多人就会说这不是到入门题吗?;直接上代码 #include<cstdio> #include<cstdlib> #include<iostream> using namespace std; int main() { long long n,a,b; scanf("%lld",&n); a=1,b=1; for(int i=3; i<=n; i++) b=a+b,a=b-a; printf("%lld",b); return 0; } 但是这样很明显是初学者的想的.如果n大一点你呢?这样子这个算法就有点显得太垃圾了.所以我们应该另一种更优的算法.那么这个算法是什么呢?这就要用的了矩阵快速幂了.那么什么是矩阵快速幂呢?在介绍快速幂之前,有几个前置技能 学过oi 会打程序 快速幂 矩阵乘法 前面两个默认你已经掌握了,如果没有,请按Alt + F4 即可; 首先讲一讲快速幂: 什么是快速幂呢?快速幂顾名思义就是快速求幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. 如果不想学可以用朴素算法,但是超时就不管了 快速幂算法的详解: 传送门