博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P3390 【模板】矩阵快速幂
阅读量:7046 次
发布时间:2019-06-28

本文共 1343 字,大约阅读时间需要 4 分钟。

题目背景

矩阵快速幂

题目描述

给定n*n的矩阵A,求A^k

输入输出格式

输入格式:

第一行,n,k

第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素

输出格式:

输出A^k

共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7

输入输出样例

输入样例#1:
2 11 11 1
输出样例#1:
1 11 1

说明

n<=100, k<=10^12, |矩阵元素|<=1000 算法:矩阵快速幂

 

裸题!。

注意矩阵相乘的时候tmp的值是累加的

1 #include
2 #include
3 #include
4 #include
5 #define LL long long 6 using namespace std; 7 const int mod = 1e9+7; 8 LL n,k; 9 LL a[101][101];10 LL tmp[101][101];11 LL ans[101][101];12 void mul(LL a[][101],LL b[][101])13 {14 memset(tmp,0,sizeof(tmp));15 for(int i=1;i<=n;i++)16 for(int j=1;j<=n;j++)17 for(int k=1;k<=n;k++)18 tmp[i][j]+=a[i][k]*b[k][j]%mod;19 20 for(int i=1;i<=n;i++)21 for(int j=1;j<=n;j++)22 a[i][j]=tmp[i][j]%mod; 23 }24 void fastpow(LL a[][101],LL k)25 {26 27 for(int i=1;i<=n;i++)ans[i][i]=1;28 while(k)29 {30 if(k%2)mul(ans,a);31 mul(a,a);32 k/=2;33 }34 for(int i=1;i<=n;i++)35 {36 for(int j=1;j<=n;j++)37 cout<
<<" ";38 printf("\n");39 }40 41 }42 int main()43 {44 cin>>n>>k;45 for(int i=1;i<=n;i++)46 for(int j=1;j<=n;j++)47 cin>>a[i][j];48 fastpow(a,k);49 return 0;50 }

 

转载地址:http://evzol.baihongyu.com/

你可能感兴趣的文章
IntelliJ IDEA安装与使用
查看>>
PHP开发支付时开启OPENSSL扩展
查看>>
javaWeb---Servlet
查看>>
Qt开发之Hello Qt及学习小技巧
查看>>
读《大数据的互联网思维》有感
查看>>
Vue.js说说组件
查看>>
在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟
查看>>
Java中使用BufferedReader的readLine()方法和read()方法来读取文件内容
查看>>
将页面上的textbox赋值为string.empty
查看>>
[.Net线程处理系列]专题三:线程池中的I/O线程
查看>>
《Java程序设计》 第一周学习任务(2)
查看>>
串复习
查看>>
C#语言课程10月31日
查看>>
11.01T3 实数二分
查看>>
react+antd分页 实现分页及页面刷新时回到刷新前的page
查看>>
express后台数据编写
查看>>
leetcode — partition-list
查看>>
在Eclipse设置打开项目或文件目录
查看>>
JAVA第一次作业
查看>>
android找不到aar包
查看>>