poj3233 Matrix Power Series
分治即可
当然也可以把矩阵看成元素用矩阵快速幂做
#include <iostream>
#include <cstdio>
using namespace std;
int n, k, m;
struct Matrix{
int num[35][35];
Matrix operator*(const Matrix &x)const{
Matrix re;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++){
re.num[i][j] = 0;
for(int k=1; k<=n; k++)
re.num[i][j] = (re.num[i][j] + num[i][k] * x.num[k][j]) % m;
}
return re;
}
Matrix operator+(const Matrix &x)const{
Matrix re;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
re.num[i][j] = (num[i][j] + x.num[i][j]) % m;
return re;
}
}a, dan;
Matrix ksm(Matrix aa, int b){
Matrix re=dan;
while(b){
if(b&1) re = re * aa;
aa = aa * aa;
b >>= 1;
}
return re;
}
Matrix sum(int x){
if(x==1) return a;
Matrix tmp=sum(x/2);
if((x&1)==0)
return tmp+tmp*ksm(a, x/2);
else
return tmp+tmp*ksm(a, x/2)+ksm(a, x);
}
int main(){
cin>>n>>k>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(i==j) dan.num[i][j] = 1;
else dan.num[i][j] = 0;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
scanf("%d", &a.num[i][j]);
Matrix ans=sum(k);
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++)
printf("%d ", ans.num[i][j]);
printf("\n");
}
return 0;
}
拙いものと思えども、
その手に握る其れこそが、
いつか幻想を生んでいく。
分类:
数学——矩阵相关
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!