首先我们要明白什么是快速幂:

举个栗子:

A*A*A*A*A*A*A*A=(A*A)*(A*A)*(A*A)*(A*A)

原来要乘次8的计算直接减少到4

此外,我们还能发现,所以乘方都能分解成n^(2^x+2^y+2^z+.....)

举个例子:

7^7=7^(2^2+2^1+2^0)=7^(2^2)*7^(2^1)*7(2^0)

这样下来,方法就十分明显了:

把 n^x 中的x分解成2的次方相加,再乘起来。

这里,我们就要用到二进制(位运算什么的就不多讲了)

例如:数字3 二进制为 11 那么就是 2^1+2^0

再比如 数字9 二进制为 1001 那么就是 2^3+()+()+2^0

再把底数加进去,就是 当二进制每往后推一为,则当前数平方

因为 n^(2*x)=(n^x)^2

下面是我的code(随便拿的一题,不要注意这些细节):

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define tt 1000000007
#define ll long long
using namespace std;
ll f[4][4],ff[4][4];//注意数组一定要定义全局,不然在函数中改变不了;
ll  t,n;
void mlti(ll a[4][4],ll b[4][4],ll ans[4][4])//乘法模板;
{ll temp[4][4];for(int i=1;i<=3;i++)for(int j=1;j<=3;j++){temp[i][j]=0;for(int k=1;k<=3;k++)temp[i][j]=(temp[i][j]+a[i][k]*b[k][j])%tt;}for(int i=1;i<=3;i++)for(int j=1;j<=3;j++)ans[i][j]=temp[i][j];//将相乘的结果转移到ans所对应的数组中;
}
int main()
{ scanf("%lld",&t);for(int i=1;i<=t;i++){memset(f,0,sizeof(f));memset(ff,0,sizeof(ff));f[1][1]=f[2][1]=f[3][1]=1;ff[1][1]=ff[1][3]=ff[2][1]=ff[3][2]=1;scanf("%lld",&n);n-=3;while(n>0){if(n&1) mlti(ff,f,f);//乘底数;mlti(ff,ff,ff);//矩阵乘平方;n>>=1;//位运算都明白;}cout<<(f[1][1])%tt<<endl;} return 0;}

矩阵快速幂 算法原理相关推荐

  1. 矩阵模板(矩阵快速幂算法用法)

    矩阵快速幂用法 应用矩阵解线性方程组入门视频 用于计算递归的方程组等:如f(n)=f(n-1)+f(n-2)+f(n-3); 在引入矩阵快速幂之前 先引入问题: 想必大家都不陌生斐波那切数. 数字公式 ...

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

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

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

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

  4. 一文彻底搞懂快速幂(原理、实现、矩阵快速幂)

    前言 大家好,我是bigsai,之前有个小老弟问到一个剑指offer一道相关快速幂的题,这里梳理一下讲一下快速幂! 快速幂是什么? 顾名思义,快速幂就是快速算底数的n次幂.你可能疑问,求n次幂算n次叠 ...

  5. mysql 矩阵运算_MySQL实现算法:矩阵快速幂

    前几日在地铁上和好友讨论起MySQL数据库,由于MySQL数据库不支持复合类型变量,就想到能否用MySQL去实现一些算法呢.最近在学习MySql存储程序,昨天闲来无事,就动手写写吧,借此巩固一下存储过 ...

  6. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    51nod 算法马拉松18 B 非010串 矩阵快速幂 非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串 ...

  7. 算法分类整理+模板①:矩阵快速幂

    一直有一个想法,感觉自己很多基础算法不是很扎实,想要找个机会写一些算法的整理,顺便自己总结一些实用的模板. 最近偶然在训练赛中连续做了2道思维+矩阵快速幂的题目,碰巧有时间,就以矩阵快速幂作为这个系列 ...

  8. 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)

    杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 传送门 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 矩阵快速幂模板 Count Problem Descript ...

  9. 快速幂算法的原理及实现

    幂运算,即次方运算,例如计算 的值即是幂运算,在实现的时候我们往往是这样写的: int __pow(int a,int b){int ans = 1;while(b--){ans *= a;}retu ...

  10. 快速幂算法及其在动态规划中的应用(矩阵幂)

    文章目录 一.快速幂算法引入 二.快速幂算法 三.快速幂算法在矩阵幂中的运算 四.LeetCode1220的快速幂做法 五.参考资料 一.快速幂算法引入   假如我们有一个需要求2^100的后三位的问 ...

最新文章

  1. Visual Studio 15.7预览版4改进Git、C++支持
  2. javase基础-Helloword
  3. 本地分发_2020年分发Python应用程序的12个热门途径
  4. 51单片机——LCD1602
  5. python 手动拼接json数据
  6. 【自学笔记】基于R语言的copula函数重现期等值线绘制
  7. 【大数据24小时】“天智一号”卫星将在太空计算数据;“电子身份证”亮相支付宝
  8. 分享盒子直播软件.已测试,网络机顶盒看电视直播哪个软件好(最好用的三款免费直播软件分享)...
  9. maxwell_电机气隙磁密与用matlab进行fft谐波分析,基于Maxwell的电机气隙磁场谐波分析程序...
  10. 屏下摄像头,实现这一全面屏终极方案有多难?
  11. Java icetea_java – OpenJDK 8的IcedTea插件
  12. 投影 WGS84坐标与北京54坐标转换
  13. 清除Internet临时文件
  14. 高版本Android真机逆向测试环境搭建
  15. 标志设计中选择合适的字体
  16. AURIX TC397 CAN MCMCAN
  17. hdmi网线延长器_HDMI单网线延长器的制作方法
  18. 9.10 安卓常用工具类之一 对话 ---- DialogUtil
  19. provider: SQL Network Interfaces , error: 26 - Error Locating Server / Instance
  20. 抢东西用的时间软件_紧急重要四象限软件用哪款?这款时间管理便签软件适合你...

热门文章

  1. 严选chat_拔草 | 网易严选的零食,真的“严选”了吗?
  2. pcm5102a解码芯片音质评测_聊一款售价两万九千元的国产解码器——声韵织女星AURALiC VEGA G1...
  3. JAVA微信小程序购物商城系统毕业设计 开题报告
  4. keytool条目_keytool常用命令
  5. Java的keytool命令
  6. 安卓 Handler 机制学习
  7. java 生成印章_印章生成
  8. android 视频录制花屏,拍大师录制视频花屏怎么办 拍大师录像花屏解决方法
  9. mtr 检测网络 查看服务器网络是否丢包
  10. 怎么样抓取微信小程序