洛谷 P3390 矩阵快速幂
来源:互联网 发布:动漫九宫格锁屏软件 编辑:程序博客网 时间:2024/04/28 06:02
题目概述
给定n*n的矩阵A,求A^k
n<=100, k<=10^12, |矩阵元素|<=1000
输出时对每个元素对10^9+7取模
解题思路
设一n*n的矩阵为A,其元素为A[i,j](1<=i,j<=n)
则A*A可用以下代码实现:
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
C[i,j]:=C[i,j]+A[i,k]*A[k,j];
由于k值较大,又存在重复运算,可以使用快速幂化简。
时间复杂度:O(n^3 log k)
空间复杂度:O(n^3)
源程序
const
maxn:int64=1000000007;
var
a,b,c:array[1..100,1..100]of int64;
i,n,j:longint;
k:int64;
procedure ksm(p:int64);
var
i,j,k:longint;
begin
if (p=0)or(p=1) then begin
b:=a;
exit;
end;
ksm(p div 2);
if odd(p) then begin
fillchar(c,sizeof(c),0);
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
c[i,j]:=(c[i,j]+b[i,k]*b[k,j])mod maxn;
b:=c;
fillchar(c,sizeof(c),0);
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
c[i,j]:=(c[i,j]+b[i,k]*a[k,j])mod maxn;
b:=c;
end
else begin
fillchar(c,sizeof(c),0);
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
c[i,j]:=(c[i,j]+b[i,k]*b[k,j])mod maxn;
b:=c;
end;
end;
begin
readln(n,k);
for i:=1 to n do
begin
for j:=1 to n do
read(a[i,j]);
readln;
end;
b:=a;
ksm(k);
for i:=1 to n do
begin
for j:=1 to n do
write(b[i,j],' ');
writeln;
end;
end.
- 洛谷 P3390 矩阵快速幂
- 矩阵快速幂 洛谷P3390
- 矩阵快速幂 洛谷p3390
- 【洛谷P3390】 矩阵快速幂(模板)
- 洛谷 P3390 【模板】矩阵快速幂
- 洛谷 P3390 【模板】矩阵快速幂
- 洛谷 P3390 矩阵快速幂模板
- P3390 【模板】矩阵快速幂
- P3390 【模板】矩阵快速幂
- P3390 【模板】矩阵快速幂
- 快速矩阵快速幂
- 洛谷 3390 矩阵快速幂
- 洛谷3390 矩阵快速幂
- 洛谷3390 矩阵快速幂
- 转移矩阵+矩阵快速幂
- 矩阵乘法 矩阵快速幂
- 构造矩阵+矩阵快速幂
- 矩阵快速幂,矩阵加法,矩阵乘法
- Mac搭建svn服务器 以及version的使用
- 【转】美国互联网电视商Netflix入华 将植入海信电视
- MD5 文件校验之 java 实现
- vyos vpn pptp
- ftp连接unix出现530 Login incorrect错误
- 洛谷 P3390 矩阵快速幂
- 矩形与矩形碰撞2
- Shell常用命令
- [00106]字符串忽略大小写的搜索替换
- 转义字符--Java基础023
- 前端精选文摘:BFC 神奇背后的原理
- 洛谷 P1208 USACO 1.3 混合牛奶 Mixing Milk
- Android App开发从零开始之入门篇(一)—64位Win10系统下安装配置开发环境
- Linux下Python安装MySQLdb以及遇到问题解决办法