close
Content

計算 R = BP mod M
對相當大的B、P、M請寫一個有效率的演算法來。

Input

每筆測試資料有3行,各有1個整數分別代表B、P、M。
其中 0 <= B <= 2147483647      0 <= P <= 2147483647      1 <= M <= 46340

Output

輸出計算的結果,每筆測試資料一行。

Sample Input #1
3
18132
17

17
1765
3

2374859
3029382
36123
Sample Output #1
13
2
13195

python:

"""
分製法:

1.當P為偶數時
BP%M = ( (BP/2%M) * (BP/2%M) )%M

2.當P為奇數時
BP%M = ( (B1%M) * (B(P-1)/2%M) * (B(P-1)/2%M) )%M
"""
def ans(b,p,m):
    #設定終止條件
    if p==0:return 1
    elif p==1: return b%m
    #分治法
    else:
        if p%2==0:
            half=ans(b,p//2,m)
            return half*half%m

        else:#p%2==1:
            half=ans(b,p//2,m)
            return half*half*b%m

while True:
    try:
        b,p,m=map(int,input().split())#跑測資的時候是一行三個數喔
        print(ans(b,p,m))
    except:break
arrow
arrow
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()