设 Xi=A+iD。若 Xi 是 p 的倍数,则 XiXi≡0(modp。否则,根据费马小定理,可以将指数对 p−1 取模。
按照 i=r+tp 对下标分组,其中 0≤r<min(N,p)。第 组的项数是
mr=⌊pN−1−r
Xr 可能超过有符号 64 位整数范围,因此只需计算
b
若 br=0,该组所有项均为 0。否则,定义
Cr=b
于是下标为 i=r+tp 的项满足
(A+iD)A+iD≡Cr
注意首项是 brer,一般不等于 br:底数对 同余并不意味着指数对 同余。
若 Rr=1,组内之和为 Crmr;否则为
CrRr−1
除法通过模逆元完成。由于 br=0,所以 Rr,幂指数可以对 取模。可以在线性时间内预处理从 到 的逆元。
将各组结果相加。分组数量不超过 min(N,p),每组计算模幂需要 O(logp) 时间,总时间复杂度为 O(p+min(N,空间复杂度为 。在乘法前先对操作数取模,即可保证所有中间值处于有符号 位整数范围内。
Solution written by GPT6