不管求一个数的幂还是矩阵的幂,比如a^16,把a做15次乘法是最容易想到的方法,但这样效率特别低。其实可以先算出a^2,其平方就是a^4,再平方就是a^8,最后平方一次,就是a^16,只要4次乘法就够了。这种逐次平方法求幂是个很基本的算法,不懂的读者请看这里:利用逐次平方法快速求幂。
另外,可以使用Application.WorksheetFunction直接调用Excel内置的函数,比如矩阵相乘函数MMULT,所以函数的实现非常简洁:
Function pow(a, m)
' a是方阵,m是不小于1的整数次幂
pow = a
m = m - 1
While m > 0
If m Mod 2 Then
pow = Application.WorksheetFunction.MMult(pow, a)
End If
a = Application.WorksheetFunction.MMult(a, a)
m = Int(m / 2)
Wend
End Function