矩阵基本运算以及快速幂模板

发布于 2024-09-13 09:34:04 字数 2377 浏览 22 评论 0

先看一下矩阵的乘法规则:

直接给出一个模板题,直接包含了基本的乘法和求幂,求幂的详细解释,可以看这篇 乘法快速幂

题目来源: XYNU OJ

题目

注意:

  • 矩阵的乘法必须满足第一个矩阵的列 = 第二个矩阵的行;
  • 矩阵的求幂必须满足矩阵是一个方阵;
import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {

  static class Matrix {
    public int row;
    public int col;
    public int[][] m;

    public Matrix(int row, int col) {
      this.row = row;
      this.col = col;
      m = new int[row][col];
    }
  }

  // 两个矩阵相加  -->  a,b 必须为 同型矩阵
  static Matrix add(Matrix a, Matrix b) {
    Matrix c = new Matrix(a.row, a.col);
    for (int i = 0; i < a.row; i++) {
      for (int j = 0; j < a.col; j++) {
        c.m[i][j] = a.m[i][j] + b.m[i][j]; // sub 减法换成-
      }
    }
    return c;
  }

  // 必须满足 a.col = b.row  才能相乘
  static Matrix mul(Matrix a, Matrix b) {
    Matrix c = new Matrix(a.row, b.col); //注意这里

    for (int i = 0; i < a.row; i++) {
      for (int j = 0; j < b.col; j++) {
        for (int k = 0; k < a.col; k++)
          c.m[i][j] = c.m[i][j] + a.m[i][k] * b.m[k][j];
      }
    }
    return c;
  }

  // 必须为 方阵才能 求幂
  static Matrix pow(Matrix a, int k) { // 矩阵 a 的 k 次幂
    Matrix res = new Matrix(a.row, a.col);  //求幂必须满足 a.row = a.col(也就是方阵)
    for (int i = 0; i < a.row; i++)
      res.m[i][i] = 1;

    // 真正的快速幂
    while (k > 0) {
      if ((k & 1) != 0)
        res = mul(res, a);
      a = mul(a, a);
      k >>= 1;
    }
    return res;
  }

  public static void main(String[] args) {
    Scanner cin = new Scanner(new BufferedInputStream(System.in));

    int n = cin.nextInt();
    int k = cin.nextInt();

    Matrix a = new Matrix(n, n);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        a.m[i][j] = cin.nextInt();
      }
    }

    Matrix res = pow(a, k);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        if (j == n - 1) {
          System.out.println(res.m[i][j]);
        } else {
          System.out.print(res.m[i][j] + " ");
        }
      }
    }
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

黑凤梨

暂无简介

文章
评论
28 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文