(x^a)当a较大时容易溢出,代码中通常对(10^9+7)取余
为了防止溢出采用循环求余法,求余操作符号为 (odot)
循环求余证明
[x^{a} odot p=left[left(x^{a-1} odot p
ight)(x odot p)
ight] odot p=left[left(x^{a-1} odot p
ight) x
ight] odot p
]
# 求 (x^a) % p —— 循环求余法
def remainder(x, a, p):
rem = 1
for _ in range(a):
rem = (rem * x) % p
return rem