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

矩阵快速幂思想和整数快速幂一样,只不过要多定义一个矩阵乘法的例子,我的代码里面给的比较简单,可以参考个思路

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