首先,要Orz鏼爺。。http://jcvb.is-programmer.com/posts/41846.html
談談積性函數吧。。
百度百科的定義:
完全積性函數指所有對於任何a,b都有性質$f(ab)=f(a)f(b)$的函數。
在數論中的積性函數:對於正整數n的一個算術函數$f(n)$,若$f(1)=1$,且當a,b
互質時$f(ab)=f(a)f(b)$,在數論上就稱它為積性函數。若對於某積性函數$f(n)$,就算a, b不互質,也有$f(ab)=f(a)f(b)$,則稱它為完全積性的。
以下均是積性函數:(度娘~)
$\phi(n)$-
歐拉函數,
$\mu(n)$-
莫比烏斯函數,關於非平方數的質因子數目
$gcd(n,k)$-最大公因子,當k固定的情況
$d(n)$-n的正因子數目
$σ(n)$-n的所有正因子之和
$1(n)$-不變的函數,定義為$1(n)=1$(完全積性)
$id(n)$-單位函數,定義為$id(n)=n$(完全積性)
$idk(n)$-冪函數,對於任何復數、實數k,定義為$idk(n)=n^{k}$(完全積性)
$\varepsilon(n)$-定義為:若$n=1$,$\varepsilon(n)=1$;若$n>1$,$\varepsilon(n)=0$。別稱為“對於
狄利克雷卷積的乘法單位”(完全積性)
$\lambda(n)$-
劉維爾函數,關於能整除n的質因子的數目
$\gamma(n)$,定義為$\gamma(n)=(-1)^{\omega (n)}$,在此加性函數$\omega (n)$是不同能整除n的質數的數目
另外,所有
狄利克雷特征均是完全積性的。
積性函數有幾個性質:
1.若$n=p_{1}^{a_{1}}p_{2}^{a_{2}}p_{3}^{a_{3}}...p_{n}^{a_{n}}$,那么$f(n)=f(p_{1}^{a_{1}})f(p_{2}^{a_{2}})f(p_{3}^{a_{3}})...f(p_{n}^{a_{n}})$。
2.若$f$為積性函數且有$f(p^{n})=f^{n}(p)$,那么$f$為完全積性函數。
狄利克雷卷積:
對於兩個算術函數$f$和$g$,定義其狄利克雷卷積為$f*g$,其中$f*g(n)=\sum_{d|n}f(d)g(\frac{n}{d})$。
狄利克雷卷積滿足很多性質:
交換律:$f*g=g*f$,
結合律:$(f*g)*h=f*(g*h)$,
逐點加法的分配律:$f*(g+h)=f*g+f*h$。
若$f$,$g$是積性函數,那么$f*g$也是積性函數。
狄利克雷卷積可以用$O(nlogn)$的篩法預處理出來。
對於積性函數,還有兩個很重要的性質:
$\sum_{d|n}\mu(d)=[n==1]$,即$1*\mu=\varepsilon$。
$\sum_{d|n}\phi(d)=n$,即$1*\phi=id$。
積性函數可以用$O(n)$的時間線性篩求出,以下是篩素數,$\mu(n),\phi(n)$的代碼:
1 vis[0]=vis[1]=1,mu[1]=1,phi[1]=1; 2 for (RG int i=2;i<=N;++i){ 3 if (!vis[i]) mu[i]=-1,phi[i]=i-1,prime[++cnt]=i; 4 for (RG int j=1,k=i*prime[j];j<=cnt && k<=N;++j,k=i*prime[j]){ 5 vis[k]=1; 6 if (!(i%prime[j])){ mu[k]=0,phi[k]=phi[i]*prime[j]; break; } 7 else mu[k]=-mu[i],phi[k]=phi[i]*phi[prime[j]]; 8 } 9 }
可以發現,線性篩分為3部分:
1.n本身是素數,這個根據積性函數的定義可得,很容易求。
2.i%prime[j]!=0,這個也是根據積性函數的性質可得,即$f(a)f(b)=f(ab)$。
3.i%prime[j]==0,這個就很麻煩了,可能需要找規律。據ljh2000神犇的說法,可以用2,4,8或3,9,27這些數來找。。
總之就是一句話:打表找規律!!!
先打素數,找素數規律,再找2,4,8和3,9,27,找出規律!然后就可以亂搞線性篩了!!!
然后,線性篩並不一定只能篩積性函數,有些具有特殊性質的函數也可以用線性篩。
以上是預備知識,可以為莫比烏斯反演做一些鋪墊吧。。