1. 程式人生 > >洲閣篩

洲閣篩

定義非完全積性函式F(x)
我們現在要做的事情是求:

x=1nF(x)
還要滿足的是:F(pc)是與p相關的低階多項式
考慮將每個x的質因數分成小於等於n和大於n兩部分:
x=1nF(x)=1ininF(i)1+n<jnijF(j)
注意到當i>n時後面部分的貢獻是1,所以要處理的東西有兩部分:
1inn<jnijF(j)

n<ininF(i)
先解決前面的部分:
gk(i,j)表示[1,j]內與前i個質數互質的數的k次方和:
那麼有轉移:
g
k
(i,j)=gk(i1,j)pik×gk(i1,jpi)

考慮gk(i,j),當pi+1>jgk(i,j)的值為1,即當pi>jpi時,後面的貢獻為pik
就是說,每次處理gk(i,j)的時候,從小到大列舉i,如果當前的pi2>j,就直接跳出,而呼叫這個位置之後的g時就直接預處理一下質數的k次方字首和
由於n以內的質數密度是O(1logn)的,j的取值只有n
所以複雜度是這樣分析的:
ni=1(ni+i)logn
分子的部分為: