矩阵快速幂的很大问题

大家好,能不能帮我看看我这个矩阵快速幂的问题

#include
using namespace std;

inline int read(){char x=getchar();int ans=0,flag=1;if(x=='-'){
flag=-1;x=getchar();}//标记符号
while(isdigit(x)){ans=ans*10+x-'0';x=getchar();}//读入 
return ans*flag;//返回值 
}//快读 

int mat[109][109],matmul[109][109],temp[109][109],ans[109][109];

//矩阵乘法 
void matMultip(int a[][109],int b[][109],int matlen){
    memset(temp,0,sizeof(temp));
    for(int i=1;i<=matlen;i++){
        for(int j=1;j<=matlen;j++){
            for(int k=1;k<=matlen;k++){
                temp[i][j]+=a[i][k];b[k][j];
            }
        }
    }
    for(int i=1;i<=matlen;i++){
        for(int j=1;j<=matlen;j++){
            matmul[i][j]=temp[i][j];
        }
    }
}

//矩阵快速幂 
void matPower(int a[][109],int matlen,int kk){
    memset(ans,0,sizeof(ans));
    for(int i=1;i<=matlen;i++){
        ans[i][i]=1;
    }
    while(kk){
        if(kk&1){
            matMultip(ans,matmul,matlen);
        }
        else{
            matMultip(matmul,matmul,matlen);
        }
        kk>>=1;
    }
}
int main(){
int n=read();//size.mat=n*n,次数=k 
for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){mat[i][j]=read();}}//mat读入  
int k=read();
matPower(mat,n,k);//矩阵幂(矩阵,大小,次数) 
for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<

该回答引用ChatGPT
修改如下

#include <iostream>
#include <cstring>
using namespace std;

const int MAXN = 109;

int mat[MAXN][MAXN], matmul[MAXN][MAXN], temp[MAXN][MAXN], ans[MAXN][MAXN];

// 矩阵乘法
void matMultip(int a[][MAXN], int b[][MAXN], int matlen) {
    memset(temp, 0, sizeof(temp));
    for (int i = 1; i <= matlen; i++) {
        for (int j = 1; j <= matlen; j++) {
            for (int k = 1; k <= matlen; k++) {
                temp[i][j] += a[i][k] * b[k][j];
            }
        }
    }
    for (int i = 1; i <= matlen; i++) {
        for (int j = 1; j <= matlen; j++) {
            matmul[i][j] = temp[i][j];
        }
    }
}

// 矩阵快速幂
void matPower(int a[][MAXN], int matlen, int kk) {
    memset(ans, 0, sizeof(ans));
    for (int i = 1; i <= matlen; i++) {
        ans[i][i] = 1;
    }
    while (kk) {
        if (kk & 1) {
            matMultip(ans, matmul, matlen);
        } else {
            matMultip(matmul, matmul, matlen);
        }
        kk >>= 1;
    }
}

int main() {
    int n, k;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> mat[i][j];
        }
    }
    cin >> k;
    matPower(mat, n, k);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cout << matmul[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}