矩阵的快速幂
来源:互联网 发布:ubuntu开机启动项 编辑:程序博客网 时间:2024/05/17 22:11
#include<stdio.h>//我需要构造一个结构来储存矩阵。typedef struct { long long a[3][3];}matrix;long long fastMod(long long n,long long mod){ matrix t,count; matrix temp,count2; t.a[1][1] = 1; t.a[1][2] = 0; t.a[2][1] = 0; t.a[2][2] = 1; temp.a[1][1] = 1; temp.a[1][2] = 1; temp.a[2][1] = 1; temp.a[2][2] = 0; // count = t; //count2 = temp; while (n != 0){ if (n % 2 == 1){ count.a[1][1]=(temp.a[1][1]*t.a[1][1]%mod+temp.a[1][2]*t.a[2][1]%mod)%mod; // printf("%lld\t",count.a[1][1]); count.a[1][2]=(temp.a[1][1]*t.a[1][2]%mod+temp.a[1][2]*t.a[2][2]%mod)%mod; // printf("%lld\n",count.a[1][2]); count.a[2][1]=(temp.a[2][1]*t.a[1][1]%mod+temp.a[2][2]*t.a[2][1]%mod)%mod; // printf("%lld\t",count.a[2][1]); count.a[2][2]=(temp.a[2][1]*t.a[1][2]%mod+temp.a[2][2]*t.a[2][2]%mod)%mod; // printf("%lld\n",count.a[2][2]); t = count; } //printf("%Temp :\n"); count2.a[1][1]=(temp.a[1][1]*temp.a[1][1]%mod+temp.a[1][2]*temp.a[2][1]%mod)%mod; // printf("%lld\t",count2.a[1][1]); count2.a[1][2]=(temp.a[1][1]*temp.a[1][2]%mod+temp.a[1][2]*temp.a[2][2]%mod)%mod; // printf("%lld\n",count2.a[1][2]); count2.a[2][1]=(temp.a[2][1]*temp.a[1][1]%mod+temp.a[2][2]*temp.a[2][1]%mod)%mod; //printf("%lld\t",count2.a[2][1]); count2.a[2][2]=(temp.a[2][1]*temp.a[1][2]%mod+temp.a[2][2]*temp.a[2][2]%mod)%mod; //printf("%lld\n",count2.a[2][2]); temp = count2; n /= 2; } int i; //printf("%lld\t%lld\n%lld\t%lld\n",t.a[1][1],t.a[1][2],t.a[2][1],t.a[2][2]); long long re = (t.a[1][1]+t.a[1][2])%mod; return re;}int main(){ int t; scanf("%d",&t); while (t --){ long long n; scanf("%lld",&n); if (n == 1)printf("1\n"); else if(n == 2)printf("1\n"); else printf("%lld\n",fastMod(n-2,10007)); } return 0;}
这个矩阵的构造比较复杂,所以花费了一点时间。另外,矩阵的运算还有一个小问题。如果直接进行原来的快速幂时
不能自己等于自己乘自己,要先声明一个结构来把值储存起来。
下面就要进行矩阵的运算优化。
matrix multiply(matrix x,matrix y){ matrix temp; memset(temp.a,0,sizeof(temp.a)); for(int i=0;i<3;i++) for(int j=0;j<3;j++) for(int k=0;k<3;k++) temp.a[i][j]+=x.a[i][k]*y.a[k][j]; return temp;}这个就厉害了,不需要我那么臃肿的赋值。
阅读全文
0 0
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的乘法和矩阵快速幂
- 矩阵快速幂---递推题的快速计算
- 快速幂求模+矩阵的快速幂
- 求矩阵的快速幂
- hdu2276(矩阵的快速幂)
- 求矩阵的快速幂
- 矩阵快速幂的学习
- 矩阵的快速幂模板
- 矩阵快速幂的复习。。。
- hadoop子节点挂掉如何重启
- Android SystemClock类
- MongoDB 介绍与安装(二)
- !!只保留文本中的中英文和符号.,其余都删除
- C# MVC webuploader同步上传前后台详解教程
- 矩阵的快速幂
- 通过seed和clone 创建PDB
- Cocos2dx零基础从入门到精通
- 先知创新大会议题第一弹:AI 威胁论!?错!
- 高并发秒杀系统技术架 构解析和实践
- 基于物品的相似度计算
- C#各个版本中的新增特性详解
- 别人的职场感悟---作为自己的警醒
- 图片缓存到SD卡中