Python寫簡單的整數快速冪和矩陣快速冪

經常會遇到求冪,按照常規操作,就會超時,現在寫兩個簡單的整數快速冪和矩陣快速冪供自己以後參考。

整數快速冪:

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))

矩陣快速冪思想和整數快速冪一樣,只不過要多定義一個矩陣乘法的例子,我的代碼裏面給的比較簡單,可以參考個思路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章