首先复习快速幂

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long power(long long a,long long b,long long k)
  4. {
  5. long long ans=,base=a;
  6. while (b>)
  7. {
  8. if(b&)
  9. {
  10. ans*=base;
  11. ans%=k;
  12. }
  13. base*=base;
  14. base%=k;
  15. b>>=;
  16. }
  17. return ans;
  18. }
  19. int main()
  20. {
  21. long long b,p,k;
  22. cin>>b>>p>>k;
  23. cout<<b<<'^'<<p<<" mod "<<k<<"="<<(power(b,p,k) % k);
  24. return ;
  25. }

我居然不DEFINE LL?可以看到上面的码十分好懂

那么矩阵快速幂也是一样的 只不过把*换成了mul函数



用计算机模拟矩阵乘法是这样的

  1. struct mat{
  2. long long m[][];//这里不开ll会死人
  3. };
  1. mat mul(mat x,mat y){
  2. mat r;
  3. for(int i=;i<=n;i++){
  4. for(int j=;j<=n;j++){
  5. r.m[i][j] = ;
  6. }
  7. }
  8. for(int i=;i<=n;i++){
  9. for(int j=;j<=n;j++){
  10. for(int k=;k<=n;k++){
  11. r.m[i][j] += (x.m[i][k] * y.m[k][j]) % p;
  12. r.m[i][j] %= p;
  13. }
  14. }
  15. }
  16. return r;
  17. }

首先定义一个矩阵并赋初值0 然后模拟乘的过程

什么?你想看矩阵乘法的公式?我不会MARKDOWN啊百度麻烦您了

还有一个小问题 就是在矩阵乘法中 什么矩阵是“1"?

答案就是(1,1)(2,2)(3,3).....(N,N)=1 其他地方为0的矩阵(可以自己手动模拟一下)

好了上完整代码

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define p 1000000007
  4.  
  5. using namespace std;
  6.  
  7. struct mat{
  8. long long m[][];
  9. }e,ans1,ans2;
  10.  
  11. ll k,n;
  12.  
  13. mat mul(mat x,mat y){
  14. mat r;
  15. for(int i=;i<=n;i++){
  16. for(int j=;j<=n;j++){
  17. r.m[i][j] = ;
  18. }
  19. }
  20. for(int i=;i<=n;i++){
  21. for(int j=;j<=n;j++){
  22. for(int k=;k<=n;k++){
  23. r.m[i][j] += (x.m[i][k] * y.m[k][j]) % p;
  24. r.m[i][j] %= p;
  25. }
  26. }
  27. }
  28. return r;
  29. }
  30.  
  31. mat pow(mat x,ll y){
  32. mat ans = e;
  33. while (y>){
  34. if(y&){
  35. ans = mul(ans,x);
  36. }
  37. x=mul(x,x);
  38. y>>=;
  39. }
  40. return ans;
  41. }
  42.  
  43. int main(){
  44. cin>>n>>k;
  45. for(int i=;i<=n;i++) e.m[i][i] = ;
  46. for(int i=;i<=n;i++){
  47. for(int j=;j<=n;j++){
  48. scanf("%d",&ans1.m[i][j]);
  49. }
  50. }
  51. ans2 =pow (ans1,k);
  52. for(int i=;i<=n;i++){
  53. for(int j=;j<=n;j++){
  54. printf("%d ",ans2.m[i][j]);
  55. }
  56. cout<<endl;
  57. }
  58. return ;
  59. }

你会了这个才会矩阵加速之类乱七八糟的东西

TAG:SIN_XIII ⑨

【数论】 快速幂&&矩阵快速幂的更多相关文章

  1. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  2. 快速幂 & 矩阵快速幂

    目录 快速幂 实数快速幂 矩阵快速幂 快速幂 实数快速幂 普通求幂的方法为 O(n) .在一些要求比较严格的题目上很有可能会超时.所以下面来介绍一下快速幂. 快速幂的思想其实是将数分解,即a^b可以分 ...

  3. jiulianhuan 快速幂--矩阵快速幂

    题目信息: 1471: Jiulianhuan 时间限制: 1 Sec  内存限制: 128 MB 提交: 95  解决: 22 题目描述 For each data set in the input ...

  4. 整数快速乘法/快速幂+矩阵快速幂+Strassen算法

    快速幂算法可以说是ACM一类竞赛中必不可少,并且也是非常基础的一类算法,鉴于我一直学的比较零散,所以今天用这个帖子总结一下 快速乘法通常有两类应用:一.整数的运算,计算(a*b) mod c  二.矩 ...

  5. 快速幂&&矩阵快速幂

    快速幂 题目链接:https://www.luogu.org/problemnew/show/P1226 快速幂用了二分的思想,即将\(a^{b}\)的指数b不断分解成二进制的形式,然后相乘累加起来, ...

  6. [板子]快速幂&矩阵快速幂

    不会的来这看:https://www.cnblogs.com/CXCXCXC/p/4641812.html 简单的一说:当转换为二进制的时候有位运算这种黑科技,&相当于%2判断奇偶性. x&a ...

  7. hdu 4549 M斐波那契数列(快速幂 矩阵快速幂 费马小定理)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4549: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速 ...

  8. 矩阵快速幂模板(pascal)

    洛谷P3390 题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格 ...

  9. 培训补坑(day10:双指针扫描+矩阵快速幂)

    这是一个神奇的课题,其实我觉得用一个词来形容这个算法挺合适的:暴力. 是啊,就是循环+暴力.没什么难的... 先来看一道裸题. 那么对于这道题,显然我们的暴力算法就是枚举区间的左右端点,然后通过前缀和 ...

随机推荐

  1. EL有11个隐含对象

    EL有11个隐含对象: 隐含对象                    类型                                             说明                ...

  2. Typora/VSCode/Sublime 更改Markdown默认宽度样式等

    Typora 所见即所得Markdown编辑器更改 最大宽度 C:\Users\Desk\AppData\Roaming\Typora\themes\github.css CSS第46行改为 max- ...

  3. 孙子兵法的计是最早的SWOT分析,《孙子兵法》首先不是战法,而是不战之法。首先不是战胜之法,而是不败之法

    孙子兵法的计是最早的SWOT分析,<孙子兵法>首先不是战法,而是不战之法.首先不是战胜之法,而是不败之法 在打仗之前,你要详细地去算. 计算的目的是什么呢?孙子说,是为了知胜,就是为了知道 ...

  4. nodejs笔记之连接mysql数据库

    1.安装mysql模块: npm install mysql 2.引入mysql模块 创建一个server.js文件 const http = require("http"); c ...

  5. 如何在Ubuntu 16.04上安装PythonGDAL 2.1?

    sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable sudo apt update sudo apt upgrade # if yo ...

  6. centos6删除mysql安装

    1.查看已经安装了的mysql包: 2.卸载mysql: 3.查看剩下的mysql安装包: 4.逐个删除剩下的mysql安装包: 5.删除完后再次查看,以确保已删除干净: 6.删除自己安装的mysql ...

  7. ltp-ddt nor_mtd_dd_rw_jffs2

    nor_mtd_dd_rw_jffs2运行报错 error getting mtd part number: $part get_mtd_biggest_part for $DEVICE_TYPE: ...

  8. Event and Delegate

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本文原更新于作者的github博客,这里给出链接. 委托 委托的实质是一个类. // 委托定义 delegate ReturnT ...

  9. Redis查漏补缺:最易错过的技术要点大扫盲

    考虑到绝大部分写业务的程序员在实际开发中使用Redis时,只会Setvalue和Getvalue两个操作,对Redis整体缺乏一个认知.又恰逢笔者有同事下周要去培训Redis,所以笔者斗胆以Redis ...

  10. Bugku-CTF之速度要快

    Day21 速度要快 速度要快!!!!!! http://123.206.87.240:8002/web6/