UOJ Logo taorunz的博客

博客

π(n)的计算++

2015-03-13 16:38:43 By taorunz

大家好我叫有兴趣的人!超人熊

看了毛爷爷的【π(n)的计算】之后,我直接被吓傻了

然而,在看了【帅气的算法二】之后,我发现了一个不优美的地方!

就是那个$P_k(x,n)$的计算复杂度和$\Phi(x,n)$的计算复杂度不一样!捂脸熊

这怎么能忍!!!炸弹熊

其实我们可以做到$O(x^\frac34)$

我们把$y$取成一个$x^{\frac14}$左右的数

这样,$\Phi(x,n)$的计算降低到了$O(x^\frac34)$

同时$P_k(x,n)$由于涉及到最大到$\frac xy$的$\pi$值,所以需要筛出$O(x^\frac34)$的质数

总共加起来的复杂度还是$O(x^\frac34)$的! 坏笑熊

一个小bug

Wait!

这里有个问题!

由于$y$减小了$P_3(x,n)$不再是0了!

思考熊

怎么办呢?

其实可以直接暴力的!

$P_3(x,n)$的意思是小于$x$的数中,可以表示为$3$个大于$p_n$的质数之积的个数。

我们枚举第一小和第二小的质数,会发现一个不超过$x^\frac13$,一个不超过$x^\frac38$,总共只有$x^\frac{17}{24}$,比$x^\frac34$少了$x^\frac1{24}$呢!

这样就完美解决啦!鼓掌熊

经过修改的算法比原来的$n^\frac56$相比,在$x=10^9$的时候,从$329\texttt{ms}$ 缩短到了$94\texttt{ms}$(vfk教导我们单位要用等宽字体)!

$x=10^{10}$也可以1秒出解啦!

(其实这篇blog里所有表情都出现啦!)

test

2015-03-04 15:38:40 By taorunz

UOJ表情使用指南

2015-02-26 19:03:26 By taorunz

![](http://uoj.ac/pictures/UOJ.ico)=

![鼓掌熊](http://img.uoj.ac/utility/bear-applaud.gif) =

![炸弹熊](http://img.uoj.ac/utility/bear-bomb.gif) =

![捂脸熊](http://img.uoj.ac/utility/bear-facepalm.jpg) =

![超人熊](http://img.uoj.ac/utility/bear-flying.gif) =

![坏笑熊](http://img.uoj.ac/utility/bear-sinister-smile.gif) =

![思考熊](http://img.uoj.ac/utility/bear-thinking.gif) =

![](http://img.uoj.ac/utility/emoticon-1.jpg) =

taorunz Avatar