B算法,是一种快速求\pi (n)的算法。限于篇幅,本文将不会讲解此算法的原型——[A算法][final]。A算法在1985年被J. C. Lagarias, V. S. Miller 和 A. M. Odlyzko改进后的Meissel-Lehmer method,用于计算\pi(4\times 10^{16})。而在1996年M. Deleglise 和 J. Rivat将其优化,用于计算\pi (10^{18})。
那么,$p_a=p_{\pi(y)} \leqslant y <p\leqslant q$。
$\because p\in[y+1,\sqrt x],\quad q\in[p,x/p]
当$p\in[y+1,\sqrt x]$时,$\dfrac x p\in\left[1,\dfrac x y\right]$。
$\therefore$我们可以用埃氏筛筛了$\left[1,\dfrac x y\right]$,然后对于每个$\left[y+1,\sqrt x\right]$的素数$p$,求$\pi\left(\dfrac x p\right)-\pi(p)+1$的值并求和就能算出$P_2(x,a)$。时间复杂度为$O\left(\dfrac x y \log\log x\right)$,空间复杂度为$O(y)$。
1.3 筛法求$\phi(x,a)