论《超越欧拉的质数筛法》时间复杂度的错误
  • 板块学术版
  • 楼主wangchenyi
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/6/27 20:25
  • 上次更新2024/7/6 19:17:59
查看原帖
论《超越欧拉的质数筛法》时间复杂度的错误
631814
wangchenyi楼主2024/6/27 20:25

超越欧拉的质数筛法

对原文中的错误致歉

原文:

m+w=O(n∗πi=1m(1−1pi))m+w=O(n*π_{i=1}^m(1-\frac{1}{p_i}))

实际上是

m+w=O(n∗πi=1c(1−1pi))m+w=O(n*π_{i=1}^c(1-\frac{1}{p_i}))

所以时间复杂度应为从O(nloglogn)O(\frac{n}{loglogn})到O(nlogn)O(\frac{n}{logn})①
仍然超越欧拉,但是并不是确定机的时间复杂度

但相比于Miller_Robin算法,这是一个确定的算法,还是有意义的

我们还是证明一下①

与原文类似的,

−lnT=∑i=1c∑k=1+oo1kpik=∑i=1c1pi+θn>=loglogc−2\begin{aligned} -lnT&=\sum_{i=1}^c\sum_{k=1}^{+oo}\frac{1}{kp_i^k}\\&=\sum_{i=1}^c\frac{1}{p_i}+\theta_n\\&>=loglogc-2 \end{aligned}

故

T<=e2logcT<=\frac{e^2}{logc}

下面估计c

显然,c<n

下证c>lnnc>ln n

显然pi>i2p_i>i^2

故

n<πi=1c+1pi+1<πi=1c+1(i+1)2=((c+1)!)2\begin{aligned} n&<π_{i=1}^{c+1}p_{i+1}\\&<π_{i=1}^{c+1}{(i+1)^2}\\&=((c+1)!)^2 \end{aligned}

由stiriling公式知:

(c+1!)=(2π(c+1))12(ce)c(1+O(1n))(c+1!)=(2π(c+1))^{\frac{1}{2}}(\frac{c}{e})^c(1+O(\frac{1}{n}))

代回可知(以下部分等号按等价号理解)

n<((c+1)!)2<(2π(c+1))(ce)2c(1+O(1n))\begin{aligned} n&<((c+1)!)^2\\&<(2π(c+1))(\frac{c}{e})^{2c}(1+O(\frac{1}{n})) \end{aligned}

可以推出:clogc>14nclogc>\frac{1}{4}n

故c>lognc>logn

故时间复杂度应为从O(nloglogn)O(\frac{n}{loglogn})到O(nlogn)O(\frac{n}{logn})
仍然超越欧拉,但是并不是确定机的时间复杂度

声明:本文和原文中的log均以e为底

2024/6/27 20:25
加载中...