经常会遇到求幂,按照常规操作,就会超时,现在写两个简单的整数快速幂和矩阵快速幂供自己以后参考。
整数快速幂:
def quickPow(a,n):
res = 1
while(n):
if n%2 != 0:
res *= a
a *= a #翻倍
n >>= 1 #二进制右移一位
return res
a,n = map(int,input().split())
print(quickPow(a,n))
矩阵快速幂:
#以2x2矩阵相乘为例
m = [[1 for i in range(2)]for j in range(2)]
m[1][1] = 0
n = int(input())
def mulMatrix(x,y): #定义二阶矩阵相乘的函数
ans = [[0 for i in range(2)]for j in range(2)]
for i in range(2):
for j in range(2):
for k in range(2):
ans[i][j] += x[i][k] * y[k][j]
return ans
def quickMatrix(m,n):
E = [[0 for i in range(2)]for j in range(2)] #先定义一个单位矩阵
for i in range(2):
E[i][i] = 1
while(n):
if n % 2 != 0:
E = mulMatrix(E,m)
m = mulMatrix(m,m)
n >>= 1
return E
print(quickMatrix(m,n))
矩阵快速幂思想和整数快速幂一样,只不过要多定义一个矩阵乘法的例子,我的代码里面给的比较简单,可以参考个思路