經常會遇到求冪,按照常規操作,就會超時,現在寫兩個簡單的整數快速冪和矩陣快速冪供自己以後參考。
整數快速冪:
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))
矩陣快速冪思想和整數快速冪一樣,只不過要多定義一個矩陣乘法的例子,我的代碼裏面給的比較簡單,可以參考個思路