\(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

posted on 2021-08-02 17:16  一抹烟霞  阅读(329)  评论(0编辑  收藏  举报

Live2D