如何在C ++中将零一矩阵提升到任何幂?

时间:2017-11-08 18:39:21

标签: c++ arrays loops matrix zero

我用功率2制作了一个零的矩阵。但是,我希望将代码应用于用户输入的任何功率。我试了几次,但它没有用。

这是您关注的代码的一部分。

注意:假设用户输入了他的(n * m)矩阵,它是" a",因为n和m是等号,它们用s表示。

k=0;
for(int j=0; j<s; j++)
    for(int i=0; i<s; i++)
    {
        m[k]=0;

        for(int t=0; t<s; t++)
        m[k]+=a[j][t]*a[t][i];

        k++;
    }

1 个答案:

答案 0 :(得分:3)

这是我对矩阵求幂的实现:

struct matrix {
    intt m[K][K];
    matrix() {
        memset (m, 0, sizeof (m));
    }
    matrix operator * (matrix b) {
        matrix c = matrix();
        for (intt i = 0; i < K; i++) {
            for (intt k = 0; k < K; k++) {
                for (intt j = 0; j < K; j++) {
                    c.m[i][j] = (c.m[i][j] + m[i][k] * b.m[k][j]) % MOD;
                }
            }
        }
        return c;
    }
    matrix pow (intt n) {
        if (n <= 0) {
            return matrix();
        }
        if (n == 1) {
            return *this;
        }
        if (n % 2 == 1) {
            return (*this) * pow (n - 1);
        } else {
            matrix X = pow (n / 2);
            return X * X;
        }
    }
};