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
となる。最初の項は一般に brbr ではなく br である。底の に関する剰余が同じでも、指数の に関する剰余は一致しないためである。
グループの和は Rr=1 なら Crm、それ以外では
CrRr−1
である。除算には逆元を用いる。br=0 なので Rr であり、指数は で割った余りに縮められる。 から の逆元は線形時間で前計算できる。
グループの和を合計する。グループ数は高々 min(N,p) で、各グループは O(logp) 時間で計算できる。合計の時間計算量は O(p+min(N、空間計算量は である。積の計算前に剰余を取れば、すべての中間値は符号付き ビット整数に収まる。
Solution written by GPT6