積性函數筆記

莫比烏斯反演的前置知識

定義

如果一個數論函數ff滿足:當nmn\perp m時,有

f(nm)=f(n)f(m)f(nm) =f(n)f(m)

則稱其爲積性函數

當不需要滿足互質條件(nm)(n\perp m)就能滿足f(nm)=f(n)f(m)f(nm) = f(n)f(m)時,稱其爲完全積性函數

ff是積性函數,且n=p1α1p2α2psαsn=p_1^{\alpha_1}p_2^{\alpha_2}…p_s^{\alpha_s}nn的標準分解,則有

f(n)=f(p1α1)f(p2α2)f(psαs)f(n)=f(p_1^{\alpha_1})f(p_2^{\alpha_2})…f(p_s^{\alpha_s})

因此研究積性函數ff可以轉化爲研究f(pα)f(p^{\alpha}),即ff在素數和素數的冪上的取值。

積性函數求值

ff是積性函數,爲求f(n)f(n),可以對nn分解素因子,然後計算所有的f(pα)f(p^{\alpha})乘起來,因此積性函數求值都可以用線性篩來求

如果要對11nn之間的所有數求出ff,注意到Euler\text{Euler}篩法的過程中可以求出每個數的最小素因子和最小素因子的冪次,利用此就能在線性時間內計算出所需的ff的值

歐拉篩如何求出最小素因子的冪次
void sieve() {
    ip[0] = ip[1] = 1;
    alpha[1] = 0;
    for (int i = 2; i < XR; i++) {
        if (!ip[i]) p[c++] = i, alpha[i] = 1, p1[i] = i;
        for (int j = 0; j < c && i * p[j] < XR; j++) {
            ip[i * p[j]] = 1;
            p1[i * p[j]] = p[j];
            if (i % p[j]) alpha[i * p[j]] = 1;
            else {
                alpha[i * p[j]] = alpha[i] + 1;
                break;
            }
        }
        //最小素因子:p1[i] ^ alpha[i]
    }
}

常見積性函數

單位函數

單位函數ϵ(n)\epsilon(n)定義爲

ϵ(n)=[n=1]={1,n=10,n1\epsilon(n)=[n=1]=\left\{ \begin{aligned} 1, & n=1 \\ 0, & n\neq 1 \end{aligned} \right.

其中[condition][\text{condition}]表示當condition\text{condition}爲真時取值爲11,否則爲00的函數。

除數函數

除數函數σk(n)\sigma_{k}(n)用來表示nn的因子的kk次方之和:

σk(n)=dndk\sigma_{k}(n)=\sum_{d|n}d^{k}

約數個數σ0(n)\sigma_{0}(n)常記爲d(n)d(n),約數和σ1(n)\sigma_{1}(n)常記爲σ(n)\sigma(n)

可以證明除數函數都是積性函數。

證明

每個素因子對函數的貢獻都是獨立的,它們之間的貢獻可以用乘積來衡量,舉一個例子:要算nn的約數個數(即d(n)d(n)),就要枚舉nn的約數dd,考慮nn的標準分解,也就是n=p1α1p2α2psαsn=p_1^{\alpha_1}p_2^{\alpha_2}…p_s^{\alpha_s},可以想象出dd的素因子也跑不出這些個素因子,只不過上面的指數不一樣,假設是β\small\beta,那麼也就是d=p1β1p2β2psβsd=p_1^{\beta_1}p_2^{\beta_2}…p_s^{\beta_s}β1\beta_1顯然是要在00α1\alpha_1之間,否則dd就不是nn的約數了,同理每個β\beta都是對應的每個00α\alpha之間的,那麼β1\beta_100α1\alpha_1α1+1\alpha_1+1種取值,每個β\beta的選取是獨立的,所以他們的貢獻的乘積就是(1+α1)(1+α2)(1+αs)(1+\alpha_1)*(1+\alpha_2)*…*(1+\alpha_s),這就是σ0\sigma_0的算法,其他的σk\sigma_k是一樣的,只不過(1+α)(1 + \alpha)這一步要換成一個求和的形式。

素因子貢獻獨立是一個常見的思路。

Euler函數(歐拉函數)

Euler\text{Euler}函數φ(n)\varphi(n)表示不超過nn且與nn互質的正整數的個數,即

φ(n)=i=1n[gcd(i,n)=1]\varphi(n)=\sum\limits_{i=1}^{n}[\gcd(i,n)=1]

比如說φ(6)=2\varphi(6)=2,兩個數是1,51,5φ(10)=4\varphi(10)=4,四個數分別爲1,3,5,71,3,5,7

nn的標準分解並結合容斥原理,我們可以得到歐拉函數的顯示錶達式:

φ(n)=ni=1s(11pi)\varphi(n)=n·\prod_{i=1}^{s}(1-\frac{1}{p_i})

其中pip_i是質數,n=p1α1p2α2psαsn=p_1^{\alpha_1}p_2^{\alpha_2}…p_s^{\alpha_s}nn的標準分解。

性質

對於任nnEuler\text{Euler}函數具有如下性質:

n=dnφ(d)n=\sum_{d|n}\varphi(d)

要證明這個等式,我們將11nn中的所有整數按與nn的最大公約數分類。

gcd(n,i)=dgcd(n,i)=d,那麼gcd(nd,di)=1gcd(\frac{n}{d},\frac{d}{i})=1。而又id\frac{i}{d}是不超過nd\frac{n}{d}的整數,故這樣的iiφ(nd)\varphi(\frac{n}{d})個。

考慮所有dnd|n,我們就考慮到了所有11nn之間的nn個整數,因此有

n=dnφ(nd)=dnφ(d)n=\sum_{d|n}\varphi(\frac{n}{d})=\sum_{d|n}\varphi(d)

證明積性

以下是從大佬那裏淘來的證明

同樣的,tnmtn,tm(tmodn)n,(tmodm)mt\perp nm\Leftrightarrow t\perp n,t\perp m\Leftrightarrow(t\bmod n)\perp n,(t\bmod m)\perp m,所以每個 [1,nm][1, nm]之間的與nmnm互質的數tt都可以對應到一個[1,n][1,n]的與nn互質的數 tmodnt\bmod n和一個[1,m][1,m]的與mm互質的數tmodmt\bmod m

並且根據中國剩餘定理,這種對應是一一對應的(即已知 an,bma\perp n, b\perp m後可以唯一確定一個[1,nm][1,nm]之間的tt使得tmodn=a,tmodm=bt\bmod n=a, t\bmod m=b,且tnmt\perp nm)。因此 φ(nm)=φ(n)φ(m)\varphi(nm)=\varphi(n)\varphi(m)


然而我看不懂……還是從定義上來證明吧!

假設有兩個互質的正整數n,mn,m,則

φ(n)=n(11pi)\varphi(n)=n\prod(1-\frac{1}{p_i})

φ(m)=m(11pi)\varphi(m)=m\prod(1-\frac{1}{p_{i'}})

φ(n)φ(m)=n(11pi)m(11pi)=nm(11pi)(11pi)\varphi(n)\varphi(m)=n\prod(1-\frac1{p_i})m\prod(1-\frac1{p_{i'}})=nm\prod(1-\frac1{p_i})\prod(1-\frac1{p_{i'}})

因爲n,mn,m互質,所以pip_ipip_{i'}各各都不相同,且都是nmnm的質因子

因此就可以推出φ(nm)=φ(n)φ(m)\varphi(nm)=\varphi(n)\varphi(m)

至此,積性函數的性質得證。但是由上面的證明可知,n,mn,m必須要互質纔可以滿足歐拉函數是積性函數,由此可見歐拉函數不是完全積性函數

恆等函數

idk=nk\mathbf{id}^k=n^k,id(n)=n\mathbf{id}(n)=n

(就醬紫一筆帶過吧……)

性質

f(x)\mathbf{f}(x)g(x)g(x)均爲積性函數,則以下函數也爲積性函數

h(x)=f(xp)h(x)=fp(x)h(x)=f(x)g(x)h(x)=dxf(d)g(xd) \begin{aligned} h(x)&=f(x^p)\\ h(x)&=f^p(x)\\ h(x)&=f(x)g(x)\\ h(x)&=\sum_{d\mid x}f(d)g(\frac{x}{d}) \end{aligned}

部分性質的證明

來自鈴懸的數學講堂(抄這個東西也很累……)

兩個積性函數的狄利克雷卷積是積性函數

考慮到上面的性質,即“若nmn\perp m則每個nmnm的約數都可以分解成一個nn的約數和一個mm的約數的積”,並且有另一個性質:若nm,an,bmn\perp m,a\mid n,b\mid maba\perp b

於是若nmn\perp m,我們就有

t(nm)=dnmf(d)g(nmd)=an,bmf(ab)g(nmab)=an,bmf(a)f(b)g(na)g(mb)=(anf(a)g(na))(bmf(b)g(mb))=t(n)t(m)\begin{aligned}t(nm)&=\sum_{d\mid nm}f(d)g\left(\frac{nm}d\right)\\&=\sum_{a\mid n,b\mid m}f(ab)g\left(\frac{nm}{ab}\right)\\&=\sum_{a\mid n,b\mid m}f(a)f(b)g\left(\frac na\right)g\left(\frac mb\right)\\&=\left(\sum_{a\mid n}f(a)g\left(\frac na\right)\right)\left(\sum_{b\mid m}f(b)g\left(\frac mb\right)\right)\\&=t(n)t(m)\end{aligned}

積性函數的逆是積性函數

第二個重要的結論:積性函數的逆是積性函數
對於一個積性函數 ff ,如何證明其逆 g(n)=[n=1]in,i1f(i)g(ni)g(n)=[n=1]-\sum_{i\mid n,i\neq1}f(i)g\left(\frac ni\right) (注意,積性函數一定滿足 f(1)=1f(1)=1 ,因爲 f(1)=f(1)f(1)f(1)=f(1)f(1) ,並且如果 f(1)=0f(1)=0f(n)0f(n)\equiv0 ,這種情況我們不考慮)也滿足積性呢?
nmnm 的大小進行歸納:

nm=1nm=1 時, g(1)=1g(1)=1 ,結論顯然成立;

假設 nm>1nm > 1 ,當 nm<nmn'm'< nm 的時候有 g(nm)=g(n)g(m)g(n'm')=g(n')g(m')
g(nm)=dnm,d1f(d)g(nmd)=an,bm,ab1f(ab)g(nmab)=an,bm,ab1f(a)f(b)g(na)g(mb)=f(1)f(1)g(n)g(m)an,bmf(a)f(b)g(na)g(mb)=g(n)g(m)(anf(a)g(na))(bmf(b)g(mb))=g(n)g(m)ϵ(n)ϵ(m)=g(n)g(m)\begin{aligned}g(nm)&=-\sum_{d\mid nm,d\neq1}f(d)g\left(\frac{nm}d\right)\\&=-\sum_{a\mid n,b\mid m,ab\neq1}f(ab)g\left(\frac{nm}{ab}\right)\\&=-\sum_{a\mid n,b\mid m,ab\neq1}f(a)f(b)g\left(\frac na\right)g\left(\frac mb\right)\\&=f(1)f(1)g(n)g(m)-\sum_{a\mid n,b\mid m}f(a)f(b)g\left(\frac na\right)g\left(\frac mb\right)\\&=g(n)g(m)-\left(\sum_{a\mid n}f(a)g\left(\frac na\right)\right)\left(\sum_{b\mid m}f(b)g\left(\frac mb\right)\right)\\&=g(n)g(m)-\epsilon(n)\epsilon(m)\\&=g(n)g(m)\end{aligned}

注意前面幾步把 g(nmab)g(\frac{nm}{ab}) 拆成 g(n/a)g(m/b)g(n/a)g(m/b) 的時候 nmab<nm\frac{nm}{ab}<nm ,可以運用歸納條件。
最後一步是因爲 nm>1nm>1 所以 n,mn,m 之間至少一個不爲 11 ,則 ϵ(n)ϵ(m)=[n=1][m=1]=0\epsilon(n)\epsilon(m)=[n=1][m=1]=0

就醬紫吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章