Luogu P3390 【模板】矩阵快速幂
【模板】矩阵快速幂
题目背景
一个
本题中认为矩阵中的元素
两个大小分别为
而如果
可以验证,矩阵乘法满足结合律,即
一个大小为
特殊地,定义
题目描述
给定
输入格式
第一行两个整数
接下来
输出格式
输出
共
样例 #1
样例输入 #1
2 1 1 1 1 1
样例输出 #1
1 1 1 1
提示
【数据范围】
对于
``cpp
include
include
include
include
include
define int long long
const int mod = 1e9 + 7;
using namespace std;
int n, k;
struct Matrix {
int matrix[103][104];
}A;
Matrix Product(Matrix b, Matrix c) {
Matrix a;
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= n; ++ j) {
a.matrix[i][j] = 0;
for (int t = 1; t <= n; ++ t) {
a.matrix[i][j] += b.matrix[i][t] * c.matrix[t][j];
a.matrix[i][j] %= mod;
}
}
}
return a;
}
Matrix MatrixQuickPower(Matrix ask) {
Matrix ans;
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= n; ++ j) {
if (i == j) ans.matrix[i][j] = 1;
else ans.matrix[i][j] = 0;
}
}
Matrix base = ask;
while (k > 0) {
if (k & 1 == 1) {
ans = Product(ans, base);
}
base = Product(base, base);
k >>= 1;
}
return ans;
}
signed main() {
cin >> n >> k;
for (int i = 1; i <= n; ++ i) { for (int j = 1; j <= n; ++ j) { cin >> A.matrix[i][j]; } } A = MatrixQuickPower(A); for (int i = 1; i <= n; ++ i) { for (int j = 1; j <= n; ++ j) { cout << A.matrix[i][j] << " "; } cout << endl; }
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!