在两年前我加强出了 这么 一道题目,当时得到的复杂度是 Θ ( k 2 log n ) \Theta(k^2 \log n) Θ(k2logn) 的,因为最后要做 n 2 n^2 n2 个快速幂。
经过了最近一段时间的摸鱼,突然发现这个复杂度可以再稍微降一点。
限于本人水平有限,接下来会列出一些我不会证明的结果,但这些结论应当是容易在教科书或网上查询确认的。
d = 4 d=4 d=4(Gaussian 整数)
对于 d = 4 d=4 d=4 的情况,我们需要对于 ∣ a ∣ + ∣ b ∣ ≤ k |a|+|b|\le k ∣a∣+∣b∣≤k,求出全体 ( a + b i ) n (a+b\mathrm{i})^n (a+bi)n。
我们的想法和 Z \mathbb Z Z 上的情形是类似的,我们如果有 z = x y z=xy z=xy,那么 z n = x n y n z^n=x^ny^n zn=xnyn,也就不用对 z z z 再额外算一次快速幂了。
由于 Z [ i ] \mathbb Z[\mathrm i] Z[i] 是欧几里得整环,所以它是 UFD。我们只需要对所有的不可约元来算一下快速幂。而 Z [ i ] \mathbb Z[\mathrm i] Z[i] 上的不可约元只有以下三种:
- 1 + i 1+\mathrm i 1+i
- a + b i a+b \mathrm i a+bi,其中 a 2 + b 2 a^2+b^2 a2+b2 为 4 k + 1 4k+1 4k+1 形式的素数。
- 4 k + 3 4k+3 4k+3 形式的素数。
那么在我们筛的范围内,1 中只有 1 1 1 个,3 中只有 Θ ( k / log k ) \Theta(k/\log k) Θ(k/logk) 个,2 的比较多,考虑所有 p ≤ k 2 p\leq k^2 p≤k2 的满足该形式的素数都会统计在内,但是每个 p p p 只对应于一组 a , b a,b a,b 和 b , a b,a b,a,因此大概只有 Θ ( k 2 / log k ) \Theta(k^2/\log k) Θ(k2/logk) 个不可约元。
那么我们的算法大概是 Θ ( k 2 log k n ) \Theta(k^2\log_k n) Θ(k2logkn) 的。
至于怎么线性筛,我们照猫画虎,将全体 a + b i a+b\mathrm i a+bi 按照 a 2 + b 2 a^2+b^2 a2+b2 从小到大排列,然后再按照这个顺序从小到大枚举不可约元就行了。
理论上需要取全体圆内整点 a 2 + b 2 ≤ k 2 a^2+b^2 \leq k^2 a2+b2≤k2。但是因为这里的图形非常特殊,如果 z z z 在圆内但不在正方形内的话,它是没有贡献的,因为它只能乘以 ± 1 , ± i \pm 1, \pm \mathrm i ±1,±i(乘以更大的数就在圆外了),但是这四个点都在正方形外。进一步地,为了减少计算量可以只筛 a > 0 , b ≥ 0 a > 0,b \ge 0 a>0,b≥0的部分。
d = 6 d=6 d=6(Eisenstein 整数)
对于 d = 6 d=6 d=6 的情况,我们需要对于 ∣ z ∣ ≤ k |z|\le k ∣z∣≤k,求出全体 z n z^n zn,其中 z = a + b ω ∈ Z [ ω ] z = a + b\omega \in \mathbb Z[\omega] z=a+bω∈Z[ω],其中 ω \omega ω 是 3 3 3 次单位根。
其实 Z [ ω ] \mathbb Z[\omega] Z[ω] 就是 Q [ − 3 ] \mathbb Q[\sqrt{-3}] Q[−3] 上的代数整数,可以打网格证明是欧几里得整环,也就是 UFD。
Z [ ω ] \mathbb Z[\omega] Z[ω] 上的不可约元的分类也表明其中 ∣ p ∣ ≤ k |p|\leq k ∣p∣≤k 的不可约元数量是 Θ ( k 2 / log k ) \Theta(k^2/\log k) Θ(k2/logk) 的。因此复杂度也是 Θ ( k 2 log k n ) \Theta(k^2\log_k n) Θ(k2logkn)。
人到中年,不太想写代码了,有兴趣再补,哈哈.jpg