「营业日志 2021.3.14」代数整数上线性筛的两个实例

在两年前我加强出了 这么 一道题目,当时得到的复杂度是 Θ ( 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+bk,求出全体 ( 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. 1 + i 1+\mathrm i 1+i
  2. 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 形式的素数。
  3. 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 pk2 的满足该形式的素数都会统计在内,但是每个 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+b2k2。但是因为这里的图形非常特殊,如果 z z z 在圆内但不在正方形内的话,它是没有贡献的,因为它只能乘以 ± 1 , ± i \pm 1, \pm \mathrm i ±1,±i(乘以更大的数就在圆外了),但是这四个点都在正方形外。进一步地,为了减少计算量可以只筛 a > 0 , b ≥ 0 a > 0,b \ge 0 a>0,b0的部分。

d = 6 d=6 d=6(Eisenstein 整数)

对于 d = 6 d=6 d=6 的情况,我们需要对于 ∣ z ∣ ≤ k |z|\le k zk,求出全体 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 pk 的不可约元数量是 Θ ( k 2 / log ⁡ k ) \Theta(k^2/\log k) Θ(k2/logk) 的。因此复杂度也是 Θ ( k 2 log ⁡ k n ) \Theta(k^2\log_k n) Θ(k2logkn)

人到中年,不太想写代码了,有兴趣再补,哈哈.jpg

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值