[數論]莫比烏斯反演入門

對莫比烏斯反演常用技巧與性質的理解與部分證明

寒假的時候雍老師就跟我們講了,可惜當時是真的傻逼,雍老師講的辣麼詳細都聽不懂。。。考試全靠背公式,打暴力。這次纔算是把寒假的坑填了大半,雖然我現在還是很菜。。。

前置知識

線篩五連:
(1)線篩素數
(2)線篩歐拉函數
(3)線篩莫比烏斯函數
(4)線篩約數個數
(5)線篩約數和

對上述函數的定義與暴力求解(在上面的鏈接裏均有提到)有一定了解,如果不甚瞭解,歡迎點擊上面的鏈接,仍有不清楚的地方可自行百度。

對和號 (本質是枚舉)有一定認識,熟悉表達式中的表述(如gcd ,下取整符號,整除符號)以及上述函數的基本性質(更深的內容會在本博客介紹並給出部分證明)。

怎麼樣,是不是門檻很低,接下來我們進入正題。

接下來的舉例大多來自於博主做過的例題,可以到博主的博客首頁查看

常用的技巧

1.求和運算式中的位置變換

顯然,當一個多項式中的所有項都與前面的一些和號的枚舉值無關的話,我們就可以把這個多項式提前:

i=1nj=1mμ(i)=i=1nμ(i)j=1m

我們經常在更該枚舉項後,交換這些枚舉項的位置。

2.更改枚舉項

總的來說是一種更改求和的限制條件的方法,也是很多變形的本質。

在初始的式子裏,枚舉項經常有一些奇奇怪怪的限制,如下:

i=1nj=1md|gcd(i,j)μ(d)

我們不妨直接枚舉d ,把限制扔到後面去,去掉限制後,由技巧1,μ(d) 也可以提到前面了:

d=1min(n,m)μ(d)i=1nj=1m[d|gcd(i,j)]

但是限制貌似仍然沒有消掉???我們仍可以再次更該枚舉項,對於d ,我們不去枚舉i,j ,因爲後面的限制使i,j 必須爲d 的倍數,所以我們不如直接枚舉d 的倍數,便成功省去了最後的限制:

d=1min(n,m)μ(d)i=1ndj=1md=d=1min(n,m)μ(d)ndmd

爲什麼上面的式子中i,j 的上限變小了?上面說到,我們直接枚舉d 的倍數,反映到式子中就變成了枚舉係數,即原來的i 變成了i×dj 變成了j×d 。最後由於和號已經沒有限制了,我們便直接將其轉化爲多項式。

3.下底分塊

上面得到的式子是可以O(n) 得到答案的,但是一般的莫比烏斯反演都有多組詢問,每次都O(n) 計算的話就只能乖乖TLE

觀察上面的式子,發現對於一個n ,存在一段區間[l,r] 使得nl=nr=k 且對於這個區間外的其它值else ,均有nelsek

這樣,對於上述的一個區間[l,r]i=lrni 是一個定值,應用到上面的式子中,就可以把[1,n] 劃分成n 個區間快速求解。

先給個結論,當我們已知l 時,有r=nnl ,證明如下:

n=kl+x1=kr+x2l,r<k

先由定義算出r

l=nx1k,r=nx2k

rl=x1x2k

r=l+x1x2k

x2<k,k|(x1x2)

x1x2k=x1k

r=l+x1k

再對等式右邊進行變形:

nl=nr=k

r=nk=l+x1k

綜上:r=nnl

證畢。

4.提出公因數

基本上是處理這種情況:

i=1nj=1m[gcd(i,j)=x]

對於這種式子我們是不方便求解的,需要把判定條件改爲[gcd(i,j)=1] ,才能使用後面要講的性質3進一步推導。那麼,我們不如將x 當做“公因數”提出去:

i=1nj=1m[gcd(i,j)=x]=i=1nxj=1mx[gcd(i,j)=1]

其本質上也可以看做是一種更換枚舉項的技巧,我們不去枚舉i,j ,直接枚舉x 的倍數,由於要求gcd(i,j)=x ,直接枚舉x 的倍數後就變成要求gcd(i,j)=1 了。

同樣的,我們觀察操作2中講到的變形:

i=1nj=1m[d|gcd(i,j)]

也可以理解爲提出了d ,式子變成:

i=1ndj=1md[1|gcd(i,j)]

由於[1|gcd(i,j)] 相當於沒有,所以就變成了上面講到的樣子。

但是,對於和號後不止一個判定條件,而是有其他式子時,提公因式時沒有這麼簡單:

i=1nj=1mij[d=gcd(i,j)]

提公因式的本質爲縮小枚舉範圍,在只有判定條件的時候,對於“計數”時沒有影響的,但是在有了其他式子時,其他的式子在範圍縮小後值也變小了,這樣“求和”得到的結果就不對了,所以我們應該像普通提公因式的操作方式,給予”補償”:

d2i=1ndj=1mdij[1=gcd(i,j)]
5.對陌生函數的線性篩法討論

線性篩要求所篩函數爲積性,即對於gcd(x,y)=1 ,有:

f(xy)=f(x)×f(y)

在積性的前提下,我們通常按照套路對f(x) 進行討論:

1.當x 爲素數時;
2.當i mod p[j]=0 時;
3.當i mod p[j]0 時;

如果對上面表述的含義不清楚,可以參考上方的線篩五連。

YY的GCD爲例(以下內容直接摘自博主的題解):

f(T)=p|Tμ(Tp),T=i×p[j] ,考慮線篩:

1.當T 本身爲素數時,顯然有f(T)=μ(1)=1

2.當T 擁有多個最小質因子(即i mod p[j]=0 )時:

(1)當i 本身無多個相同質因子時,那麼當且僅當我們枚舉的素數等於p[j] 時,μ(Tp) 的值不爲0 ,此時p=p[j],T=i×p[j] ,所以有μ(Tp)=μ(i)

(2)當i 本身就是擁有多個因子的數時,無論我們怎麼枚舉,μ(Tp) 的值都爲0 ,此時,仍然有μ(Tp)=μ(i)

3.當T 的最小質因子只有一個時:

此時,T 就比i 多了一個質因數p[j] ,因爲有:

f(i)=p|iμ(ip)f(T)=p|Tμ(i×p[j]p)

因爲i 中沒有質因數p[j] ,所以有μ(i×p[j]p)=μ(ip) ,在此基礎上,T 還多了一個μ(i×p[j]p[j])=μ(i) 。可得,f(T)=f(i)+μ(i)

綜上,我們得到線篩方程:

f(T)={μ(1)TPμ(i)i mod p[j]=0f(i)+μ(i)i mod p[j]0

只要對函數的討論清晰,一般還是沒什麼問題。

6.替換未知數

有些時候會見到,這種形狀:

ans=Pd=1min(np,mp)μ(d)ndpmdp

又或者是:

ans=d=1ndd=1nμ(d)nddndd

注意到諸如dp,dd 的形狀看起來非常不爽,不如替換掉,以上面的第二個式子爲例,設T=dd ,代入:

ans=d=1nd=1nμ(Td)dnTnT

再枚舉T

ans=T=1nd|Tμ(Td)dnTnT

利用下面講到的結論4,即可化簡爲:

ans=T=1nφ(T)nTnT

本質上,替換未知數也是爲了方便更換枚舉項。

7.對特定形狀的替換

如果說上面講到的都是“普遍”形狀,在求和算式中常常用到。

那麼“特定”形狀就是一些具有特別長相的式子,需要識別出來加以替換以進行下一步化簡,下面介紹的性質和結論都是這樣一類特殊的式子。

常用的性質與結論

1.莫比烏斯函數的定義

在上面線篩莫比烏斯函數的博客中提到了莫比烏斯函數的通俗定義:
(1)莫比烏斯函數μ(n) 的定義域是N+
(2)μ(1)=1
(3)當n存在平方因子時,μ(n)=0
(4)當n是素數或奇數個不同素數之積時,μ(n)=1
(5)當n是偶數個不同素數之積時,μ(n)=1

然而莫比烏斯函數的真正定義是這樣的:

d|xμ(d)={1x=10x>1

所以不如說上面的通俗定義纔是莫比烏斯函數的性質,而莫比烏斯函數的真正定義是我們經常用到的一個性質。

2.莫比烏斯反演定理

對於函數F(x),f(x) ,如果有F(x)=d|xf(d) ,那麼就有:

f(x)=d|xμ(d)F(xd)

證明如下:

直接將F(x) 替換爲f(x)

d|xμ(d)F(xd)=d|xμ(d)d|xdf(d)

我們交換枚舉順序,先枚舉d

d|xμ(d)d|xdf(d)=d|xf(d)d|xdμ(d)

由性質1,可得,當且僅當xd=1x=dd|xdμ(d) 的值不爲0 ,因此:

d|xf(d)d|xdμ(d)=f(x)

證畢。

利用這個定理,可以設出具有上述關係的F(x),f(x) 進行各種騷操作,常見於各種神犇的博客。但是你在本蒟蒻的博客不會見到這種東西,博主不是很會,蒟蒻博主更習慣用更本質的莫比烏斯反演:性質3。

3.對[gcd(i,j)=1] 的替換

在反演時,博主經常使用這個結論:

[gcd(i,j)=1]d|gcd(i,j)μ(d)

證明非常簡單,利用性質1,我們可以得到,當且僅當gcd(i,j)=1 時,d|gcd(i,j)μ(d) 的值不爲0

4.歐拉函數與莫比烏斯函數的互推

歐拉函數與莫比烏斯函數有奇妙的關係:

φ(x)=d|xμ(xd)d

我們考慮對歐拉函數的定義進行變形:

φ(x)=i=1x[gcd(i,x)=1]

利用性質3:

i=1x[gcd(i,x)=1]=i=1xd|gcd(i,x)μ(d)

我們直接枚舉d

i=1xd|gcd(i,x)μ(d)=d|xi=1xμ(d)[d|gcd(i,x)]

考慮直接枚舉d 的倍數,而不是去枚舉i

d|xi=1xμ(d)[d|gcd(i,x)]=d|xi=1xdμ(d)

因爲μ(d) 只與d 有關,可以提前:

d|xi=1xdμ(d)=d|xμ(d)i=1xd=d|xμ(d)xd

對於我們枚舉的d|x ,顯然xdd 是等價的,所以最後化簡爲:

φ(x)=d|xμ(xd)d

證畢。

歐拉函數實際應用中出現頻率不是很高,但在化簡時若見到上述形狀可以嘗試進行替換。

5.約數個數函數σ0(x)

神奇性質如下:

σ0(nm)=x|ny|m[gcd(x,y)=1]

n=i=1kpiai,m=i=1kpibi

nm=i=1kpiai+bi

σ0(nm)=i=1k(ai+bi+1)

對於n,m ,若前i 個質因子的貢獻爲W ,考慮第i+1 個質因子對答案的貢獻:

選取pi+1 的方案分別爲:

1.由x 選取,那麼可以選1ai+1pi+1 ,方案數爲ai+1 個;

2.由y 選取,那麼可以選1bi+1pi+1 ,方案數爲bi+1 個;

3.都不選,方案數爲1

所以選取pi+1 的方案數總和爲ai+1+bi+1+1 個。

故最後的方案數爲:

i=1k(ai+bi+1)

證畢。

後記

如果有更多的技巧與結論,博主會更新。

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