简化版题意 多次询问ab%pa^b\%p的值,其实就是强化版的快速幂。

30%30\%:

裸的快速幂,复杂度O(Tlogb)O(Tlogb)

50%50\%~70%70\%:

发现对于50%50\%的数据,bb\le103010^{30},普通的变量无法存储指数,加上一点儿简化的高精度即可,复杂度仍然为O(Tlogb)O(Tlogb)

(不过貌似造数据的时候有点水了,实际上高精度能够拿到70pts70pts,并且考试的时候有人直接PythonPython就拿了7070)。

100%100\%:

发现数据范围非常独特,只有指数bb非常之大,而底数aa和模数pp都与正常快速幂无异,因此本题应从如何处理指数bb入手。

这里,我们就要用到一个重要的数论知识——费马小定理。其形式如下:

pp是质数,则对于任意整数aa,有apa(mod p)a^p≡a(mod\ p)

aa,pp互质,且pp为质数时,有ap11(mod p)a^{p−1}≡1(mod\ p)

利用这个公式,我们进行以下推导:

b>pb>p时,ababp+1(mod p)a^b≡a^{b−p+1}(mod\ p),那么在进行多次恒等后,新的指数最终将会小于p1p-1

此时有恒等式abab%(p1)(mod p)a^b≡a^{b\%(p−1)}(mod\ p)成立

因此,我们将指数bb以字符串形式读入,从最低位起依次叠加,乘1010,模p1p-1,得到新的指数,再进行快速幂即可,复杂度O(T(logp+lgb))O(T(logp+lgb))

1 条评论

  • @ 2024-12-27 20:12:15

    若有什么疑问,或者题解有什么问题,欢迎在下方评论留言。

    • 1

    信息

    ID
    1072
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    31
    已通过
    3
    上传者