一个我自己写的矩阵快速幂模板
来源:互联网 发布:ubuntu trusty xenial 编辑:程序博客网 时间:2024/05/17 05:57
/* n阶方形矩阵快速幂模板,如果m*n的矩阵可以考虑将m,n存入结构体matrix中 函数分为3个,分别是矩阵相乘,转化单位矩阵,快速幂。 测试结果 AC BY SHU_ONISAC */#include<iostream>#include<cstring>using namespace std;struct matrix{long long a[15][15];};matrix matrix_muti(matrix a,matrix b,int n)//矩阵相乘(这个只要注意i,j,k的顺序就行了) {matrix c;memset(c.a,0,sizeof(c.a));for(int i=0;i<n;++i) for(int j=0;j<n;++j) for(int k=0;k<n;++k){ c.a[i][j]+=a.a[i][k]*b.a[k][j]; }return c;}matrix init(matrix r,int n)//转化单位矩阵 {for(int i=0;i<n;++i){for(int j=0;j<n;++j) r.a[i][j]=(i==j);}return r;}matrix fast_power(matrix a,int n,int k)//快速幂 { matrix r; r=init(r,n);//先将r.a化为单位矩阵 while(k){ if(k&1)r=matrix_muti(r,a,n); /*(k&1)与(k&2==1)是一个意思,就是矩阵相乘的时候如果幂次不是偶数, 要提出一个“因数”存在r内。又因为无论 k是奇数或者偶数,由于k=k>>1(相当于k=k/2), k最终一定会先变为1再变为0,所以最终结果可以存在r中。*/ a=matrix_muti(a,a,n); k=k>>1;}return r;}int main(){ int n,k; matrix ori,ans; while(cin>>n>>k) { for(int i=0;i<n;++i)//将输入的数据存在ori中 for(int j=0;j<n;++j) cin>>ori.a[i][j]; ans=fast_power(ori,n,k);//运行快速幂 for(int i=0;i<n;++i)//输出结果 { for(int j=0;j<n;++j) { if(j<n-1)cout<<ans.a[i][j]<<' '; else cout<<ans.a[i][j]; } cout<<endl;}cout<<endl;}return 0;}
0 0
- 一个我自己写的矩阵快速幂模板
- 自己写的矩阵模板
- 自己写一个快速开发android模板
- 矩阵的快速幂模板
- 快速排序 我自己写的
- 自己写的一个jquery模板引擎
- 一个自己写的PHP模板引擎
- 自己写的一个快速排序
- 自己写的一个快速排序
- 我自己写的一个表情组件
- 矩阵快速幂模板
- 矩阵快速幂--模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 【矩阵快速幂模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- IT公司笔试题细节
- SVM支持向量机(一)---简介
- about kvm
- 各种杂项组件(4)之----SearchView(搜索框)、TabHost(选项卡)、ScrollView(滚动视图)
- IOS之Objective-C学习笔记(七)
- 一个我自己写的矩阵快速幂模板
- Python爬虫入门 《下》
- SOAP消息机制简介
- 打印分数---循环switch
- 黑马程序员之String类
- HDU1712 分组背包
- 单例设计模式
- 系统登录
- TP 框架中 获取变量 I()方法