将2D阵列提升到C中的功率

时间:2015-05-15 07:14:09

标签: c arrays matrix

我正在使用C并且有一个表示方阵的二维数组。我想要做的是将矩阵计算为n的幂,给定整数。

我是最有效的方法。我的第一个想法是将矩阵乘以其自身n次,但后来我通过平方听到指数化。但是,我不确定如何实现这一点,有人可以指导我完成吗?

1 个答案:

答案 0 :(得分:4)

以下是基本概要:

Matrix matrixExponent(Matrix m, int n)
{
      Matrix accumulator = MatrixIdentity();
      Matrix power2 = m;

      while(n != 0)
      {
           if(n & 1)
                 accumulator = MatrixMultiply(&accumulator, &power2);
           power2 = MatrixMultiply(&power2, &power2);
           n = n / 2;
      }
      return accumulator;
}

存储累加器,它是部分计算的指数。给定的整数指数可以分解为一系列幂乘2指数相乘。例如,当将数组提升到14的幂(二进制1110)时,矩阵乘以其14次等于:

m 14 = m 8 * m 4 * m 2

因此,您只需通过重复乘以power2与其自身来计算2的所有幂,同时逐步遍历整数指数n的每个位,并在每次该位为1时将power2与累加器相乘。