筆試——快速冪取模

在這裏插入圖片描述

阿里巴巴2021暑期實習筆試題,題目本身需要經過數學推導,得到答案的表達式爲 (n×2n1)%(109+7)(n\times 2^{n-1}) \% (10^9+7) ,其中 nn 是輸入的一個大數,%\% 是取模運算。

本題需要使用快速冪取模算法,在python中有自帶的實現:

pow(a,b,c)  # 等價於(a^b)%c,但在b非常大時效率高很多

使用其他語言需要自己實現,可以參考下面的資料與代碼:

[1] 快速冪取模快速算法超級詳細介紹

def quick_pow_mod(a, b, c):
    A = 1  # 一個遞推數列
    T = a % c  # 一個輔助的遞推數列
    while b != 0:  # 用b每次除以2直到爲0
        # 遞推An,如果當前b的二進制最低位不是1則不用計算,因爲An=An-1
        if b & 1:
            A = (A * T) % c
        # 遞推Tn
        T = (T * T) % c
        b >>= 1
    return A
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章