1. 程式人生 > >「學習筆記」Min25篩

「學習筆記」Min25篩

前言

M i n 25 Min25 篩是一種能夠用於求解積性函式 f ( x

) f(x) 的字首和的方法,其前提條件是 x , n
x f ( x ) \sum_{x\leq,nx是質數} f(x)
可以用 x , n x h ( x ) \sum_{x\leq,nx是質數} h(x) 簡單表示。其中 h ( x ) h(x) 為完全積性函式。

過程

首先,對於每一個 n x \lfloor \frac{n}{x} \rfloor ,我們求出 x , n x h ( x ) \sum_{x\leq,nx是質數} h(x)

p i p_i 表示第 i i 小的質數, g ( N , i ) g(N,i) 表示 x n , x p i h ( x ) \sum_{x\leq n,x的最小質因子\geq p_i}h(x) 。即 N N 以內的數進行 i i 輪埃氏篩後未被篩掉的數的 h ( x ) h(x) 之和(質數未被刪去),則所求即為 g ( N , P ) g(N,|P|) P |P| n \leq n 的質數個數)。

考慮如何由 g ( N , i 1 ) g(N,i-1) 得到 g ( N , i ) g(N,i) 。考慮第 i i 輪埃氏篩所篩去的數。當 p i 2 > n p_i^2 > n 時,第 i i 輪不會篩去任何數。否則,將篩去最小質因子 p i \geq p_i 的合數,所以

g ( N , i ) = g ( N , i 1 ) h ( p i ) × ( g ( N p i , i 1 ) j = 1 i 1 h ( p i ) ) g(N,i)=g(N,i-1)-h(p_i)\times(g(\lfloor \frac {N} {p_i}\rfloor,i-1)-\sum_{j=1}^{i-1}h(p_i))

因為 p i 2 N p_i^2\leq N ,所以 p i N p i p_i \leq \lfloor \frac {N} {p_i}\rfloor ,所以 p i \leq p_i 的質數也會被包含在 g ( N p i , i 1 ) g(\lfloor \frac {N} {p_i}\rfloor,i-1) 裡,要加回來。

綜上,

g ( N , i ) = { g ( N , i 1 ) p i 2 > n g ( N , i 1 ) h ( p i ) × ( g ( N p i , i 1 ) j = 1 i 1 h ( p i ) ) p i 2 n g(N,i)=\begin{cases} g(N,i-1)&p_i^2\gt n\\ g(N,i-1)-h(p_i)\times(g(\lfloor \frac {N} {p_i}\rfloor,i-1)-\sum_{j=1}^{i-1}h(p_i))&p_i^2\le n\end{cases}

這部分的時間複雜度是 O ( N 3 4 l o g    N ) O(\frac {N^{\frac {3} {4}}} {log \ \ N})

接下來考慮如何用上述資訊求