阿里巴巴2021暑期实习笔试题,题目本身需要经过数学推导,得到答案的表达式为 ,其中 是输入的一个大数, 是取模运算。
本题需要使用快速幂取模算法,在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