Meissel-Lehmer算法 學習筆記


定義\(\pi_k(n)\)為質數的\(k\)次冪前綴和函數,即\(\pi_k(n)=\sum_{1\leq i\leq \pi(n)}p^k\)。特別地,\(\pi_0(n)=\pi(n)\),為質數計數函數。求\(\pi_k(n)\)

解法

(若無特殊說明,下文中單獨出現的\(p\)\(q\)均為質數)

定義

  • \(\delta(x)\)\(x\)的最小質因子,\(\gamma(x)\)\(x\)的最大質因子。

  • \(cnt(x)\)\(x\)的質因子個數。

  • \(S_k(n)\)為自然數冪和函數。\(S_k(n)=\sum_{1\leq i\leq n}i^k\)

  • \(\phi_k\)為部分篩函數。\(\phi_k(n,a)=\sum_{\substack{1\leq x\leq n\\ \delta(x)> p_a}}x^k\)

  • \(P_{s,k}(n,a)=\sum_{\substack{1\leq x\leq n\\ \delta(x)> p_a\\ cnt(x)=s}}x^k\)

那么

\[\phi_k(n,a)=\sum_{s\geq 0}P_{s,k}(n,a) \]

考慮素數\(B=p_a\),當\(n^\frac{1}{3}\leq B\leq n^\frac{1}{2}\)時,有

\[\phi_k(n,a)=P_{0,k}(n,a)+P_{1,k}(n,a)+P_{2,k}(n,a)=1+\pi_k(n)-\pi_k(p_a)+P_{2,k}(n,a) \]

於是

\[\pi_k(n)=\phi_k(n)-P_{2,k}(n,a)+\pi_k(p_a)-1 \]

故只需要分別計算\(\pi_k(p_a)\)\(P_{2,k}(n,a)\)\(\phi_k(n,a)\)即可。

對於\(\pi_k(p_a)\)。線性篩即可。時間復雜度\(O(B)\)

對於\(P_{2,k}(n,a)\)。根據定義有

\[P_{2,k}(n,a)=\sum_{\substack{p_a< p\leq q\\ pq\leq n}}(pq)^k \]

注意到\(B< p\leq q< \left\lfloor\frac{n}{B}\right\rfloor\),於是線性篩預處理,然后枚舉\(p\)計算所有可行的\(q\)的貢獻,為

\[P_{2,k}(n,a)=\sum_{p_a< p\leq \sqrt{n}}p^k\left(\pi_k\left(\left\lfloor\frac{n}{p}\right\rfloor\right)-\pi_k(p-1)\right) \]

時間復雜度\(O(\frac{n}{B})\)

對於\(\phi_k(n,a)\)。根據容斥,容易得到遞推式

\[\phi_k(n,a)=\phi_k(n,a-1)-p_a^k\phi\left(\left\lfloor\frac{n}{p_a}\right\rfloor,a-1\right) \]

邊界條件為

\[\phi_k(n,0)=S_k(n) \]

考慮DFS計算該式。

若每次都遞推到邊界,有

\[\phi_k(n,a)=\sum_{\gamma(x)\leq p_a}\mu(x)x^kS_k\left(\left\lfloor\frac{n}{x}\right\rfloor\right) \]

復雜度難以接受,考慮剪枝。

加入\(x> B\)時停止遞歸的剪枝,有

\[\phi_k(n,a)=\sum_{x\leq B}\mu(n)x^kS_k\left(\left\lfloor\frac{n}{x}\right\rfloor\right)+\sum_{\frac{x}{\delta(x)}\leq B< x}\mu(x)x^k\phi_k\left(\left\lfloor\frac{n}{x}\right\rfloor,\pi(\delta(x))-1\right) \]

\[\mathcal{S_0}=\sum_{x\leq B}\mu(n)x^kS_k\left(\left\lfloor\frac{n}{x}\right\rfloor\right) \]

\[\mathcal{S}=\sum_{\frac{x}{\delta(x)}\leq B< x}\mu(x)x^k\phi_k\left(\left\lfloor\frac{n}{x}\right\rfloor,\pi(\delta(x))-1\right) \]

那么

\[\phi_k(n,a)=\mathcal{S_0}+\mathcal{S} \]

對於\(\mathcal{S_0}\),線性篩預處理后\(O(B)\)計算即可。

對於

\[\mathcal{S}=-\sum_{p\leq B}\sum_{\substack{\delta(x)> p\\ x\leq B< xp}}\mu(x)p^kx^k\phi_k\left(\left\lfloor\frac{n}{xp}\right\rfloor,\pi(p)-1\right) \]

分塊計算。

\[\mathcal{S_1}=-\sum_{n^\frac{1}{3}< p\leq B}\sum_{\substack{\delta(x)> p\\ x\leq B< xp}}\mu(x)p^kx^k\phi_k\left(\left\lfloor\frac{n}{xp}\right\rfloor,\pi(p)-1\right) \]

\[\mathcal{S_2}=-\sum_{n^\frac{1}{4}< p\leq n^\frac{1}{3}}\sum_{\substack{\delta(x)> p\\ x\leq B< xp}}\mu(x)p^kx^k\phi_k\left(\left\lfloor\frac{n}{xp}\right\rfloor,\pi(p)-1\right) \]

\[\mathcal{S_3}=-\sum_{p\leq n^\frac{1}{4}}\sum_{\substack{\delta(x)> p\\ x\leq B< xp}}\mu(x)p^kx^k\phi_k\left(\left\lfloor\frac{n}{xp}\right\rfloor,\pi(p)-1\right) \]

那么

\[\mathcal{S}=\mathcal{S_1}+\mathcal{S_2}+\mathcal{S_3} \]

對於\(\mathcal{S_1},\mathcal{S_2}\),注意到\(\delta(x)> p> n^\frac{1}{4}\)\(x\leq B\leq n^\frac{1}{2}\)。於是\(x\)只能為質數。

於是

\[\mathcal{S_1}=\sum_{n^\frac{1}{3}< p\leq B}\sum_{p< q\leq B}p^kq^k\phi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor,\pi(p)-1\right) \]

\[\mathcal{S_2}=\sum_{n^\frac{1}{4}< p\leq n^\frac{1}{3}}\sum_{p< q\leq B}p^kq^k\phi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor,\pi(p)-1\right) \]

對於\(\mathcal{S_1}\)。由於\(\left\lfloor\frac{n}{pq}\right\rfloor< n^\frac{1}{3}< p\),所以\(\phi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor,\pi(p)-1\right)=1\)

於是

\[\mathcal{S_1}=\sum_{n^\frac{1}{3}< p\leq B}\sum_{p< q\leq B}p^kq^k=\sum_{n^\frac{1}{3}< p\leq B}p^k(\pi_k(B)-\pi_k(p)) \]

時間復雜度\(O(B)\)

對於\(\mathcal{S_2}\),考慮分成兩個部分計算。令

\[\mathcal{U}=\sum_{n^\frac{1}{4}< p\leq n^\frac{1}{3}}\sum_{\substack{p< q\leq B\\ q> \frac{n}{p^2}}}p^kq^k\phi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor,\pi(p)-1\right) \]

\[\mathcal{V}=\sum_{n^\frac{1}{4}< p\leq n^\frac{1}{3}}\sum_{\substack{p< q\leq B\\ q\leq \frac{n}{p^2}}}p^kq^k\phi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor,\pi(p)-1\right) \]

那么\(\mathcal{S_2}=\mathcal{U}+\mathcal{V}\)

對於\(\mathcal{U}\),因為\(q> \frac{n}{p^2}\),所以有\(p> \sqrt{\frac{n}{q}}\geq \sqrt{\frac{n}{B}}\)。同時,由於\(\left\lfloor\frac{n}{pq}\right\rfloor<p\),所以\(\phi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor,\pi(p)-1\right)=1\)

於是

\[\mathcal{U}=\sum_{\sqrt{\frac{n}{B}}< p\leq n^\frac{1}{3}}\sum_{\substack{p< q\leq B\\ q> \frac{n}{p^2}}}p^kq^k=\sum_{\sqrt{\frac{n}{B}}< p\leq n^\frac{1}{3}}p^k\left(\pi_k(B)-\pi_k\left(\min\left\{p,\left\lfloor\frac{n}{p^2}\right\rfloor\right\}\right)\right) \]

時間復雜度\(O(B)\)

對於\(\mathcal{V}\),我們有\(p\leq \frac{n}{pq}< \sqrt{n}< p^2\),所以\(\phi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor,\pi(p)-1\right)=1+\pi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor\right)-\pi_k(p)+p^k\)

於是把\(\mathcal{V}\)分成兩個部分計算。令

\[\mathcal{V_1}=\sum_{n^\frac{1}{4}< p\leq n^\frac{1}{3}}p^k(1-\pi_k(p)+p^k)\sum_{\substack{p< q\leq B\\ q\leq \frac{n}{p^2}}}q^k \]

\[\mathcal{V_2}=\sum_{n^\frac{1}{4}< p\leq n^\frac{1}{3}}p^k\sum_{\substack{p< q\leq B\\ q\leq \frac{n}{p^2}}}q^k\pi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor\right) \]

那么\(\mathcal{V}=\mathcal{V_1}+\mathcal{V_2}\)

對於\(\mathcal{V_1}\),直接枚舉\(p\)計算即可。

對於\(\mathcal{V_2}\),用類似數論分塊的方法計算。枚舉\(p\),對於所有\(\pi_k\left(\left\lfloor\frac{n}{pq}\right\rfloor\right)\)相同的\(q\)一起統計貢獻,可以證明最多只有\(\pi\left(\left\lfloor\frac{n}{p^2}\right\rfloor\right)\),個狀態。於是時間復雜度為\(O\left(\frac{n^\frac{2}{3}}{\log n}\right)\)

對於\(\mathcal{S_3}\),枚舉\(p\),用樹狀數組統計其對所有有用的\(\phi_k\)的貢獻。時間復雜度為\(O\left(\frac{n}{B}\log n\right)\)

時間復雜度

\(B=O(n^\frac{1}{3}\log^2 n)\)時總復雜度達到最優,為\(O\left(\frac{n^\frac{2}{3}}{\log n}\right)\)

(將\(\mathcal{V_2}\)分成5個部分計算可進一步將時間復雜度優化至\(O\left(\frac{n^\frac{2}{3}}{\log^2 n}\right)\),在此不過多敘述)。

(實際上由於常數原因,在\(n\leq 10^{11}\)范圍內跑得不如\(O\left(\frac{n^\frac{3}{4}}{\log n}\right)\)的遞推做法或\(O(n^\frac{2}{3})\)的樹狀數組優化做法快)。

代碼咕咕咕

參考文獻:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM