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