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

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

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


 

行列都是n

 


 

#include 
#include
#include
#include
#include
using namespace std;const int N=105,MOD=1000000007;typedef long long ll;inline ll read(){ char c=getchar();ll x=0,f=1; while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}ll n,k;struct mat{ ll mt[N][N]; mat(){memset(mt,0,sizeof(mt));}}a,im,ans;void init(){ for(int i=1;i<=n;i++) im.mt[i][i]=1;}mat mul(mat &a,mat &b){ mat c; for(int i=1;i<=n;i++) for(int k=1;k<=n;k++) if(a.mt[i][k]) for(int j=1;j<=n;j++) c.mt[i][j]=(c.mt[i][j]+a.mt[i][k]*b.mt[k][j])%MOD; return c;}void pow(mat &a,ll b){ ans=im; for(;b;b>>=1,a=mul(a,a)) if(b&1) ans=mul(ans,a);}int main(){ n=read();k=read(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a.mt[i][j]=read(); init(); pow(a,k); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) printf("%lld ",ans.mt[i][j]); putchar('\n'); }}

 

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

你可能感兴趣的文章
不老的神器:安全扫描器Nmap渗透使用指南【转】
查看>>
Java-NIO(六):Channel聚集(gather)写入与分散(scatter)读取
查看>>
CUBA如何新增ServiceBean
查看>>
【开源分享:入门到精通ASP.NET MVC+EF6+Bootstrap】从这里开始,一起搭框架(1)开篇介绍...
查看>>
【技术文档】jeecg3.7-maven搭建好开发环境入门
查看>>
centos7 关闭firewall安装iptables并配置
查看>>
搜索7--noi1804:小游戏
查看>>
聊一聊分布式锁的设计
查看>>
模运算的规则
查看>>
Nginx + Tomcat 动静分离实现负载均衡
查看>>
浏览器配置工具.bat
查看>>
ViewPager实现引导页
查看>>
Image Filter
查看>>
项目笔记:新增、编辑与删除
查看>>
前向星和链式前向星
查看>>
3.1软件体系结构风格
查看>>
LinkedHashMap 源码解析
查看>>
MySQL--当事务遇到DDL命令
查看>>
Linux系统centOS7在虚拟机下的安装及XShell软件的配置
查看>>
网络知识 ACL NAT IPv6
查看>>