對莫比烏斯反演常用技巧與性質的理解與部分證明
寒假的時候雍老師就跟我們講了,可惜當時是真的傻逼,雍老師講的辣麼詳細都聽不懂。。。考試全靠背公式,打暴力。這次纔算是把寒假的坑填了大半,雖然我現在還是很菜。。。
前置知識
線篩五連:
(1)線篩素數
(2)線篩歐拉函數
(3)線篩莫比烏斯函數
(4)線篩約數個數
(5)線篩約數和
對上述函數的定義與暴力求解(在上面的鏈接裏均有提到)有一定了解,如果不甚瞭解,歡迎點擊上面的鏈接,仍有不清楚的地方可自行百度。
對和號∑ (本質是枚舉)有一定認識,熟悉表達式中的表述(如gcd ,下取整符號,整除符號)以及上述函數的基本性質(更深的內容會在本博客介紹並給出部分證明)。
怎麼樣,是不是門檻很低,接下來我們進入正題。
接下來的舉例大多來自於博主做過的例題,可以到博主的博客首頁查看
常用的技巧
1.求和運算式中的位置變換
顯然,當一個多項式中的所有項都與前面的一些和號的枚舉值無關的話,我們就可以把這個多項式提前:
∑i=1n∑j=1mμ(i)=∑i=1nμ(i)∑j=1m
我們經常在更該枚舉項後,交換這些枚舉項的位置。
2.更改枚舉項
總的來說是一種更改求和的限制條件的方法,也是很多變形的本質。
在初始的式子裏,枚舉項經常有一些奇奇怪怪的限制,如下:
∑i=1n∑j=1m∑d|gcd(i,j)μ(d)
我們不妨直接枚舉d ,把限制扔到後面去,去掉限制後,由技巧1,μ(d) 也可以提到前面了:
∑d=1min(n,m)μ(d)∑i=1n∑j=1m[d|gcd(i,j)]
但是限制貌似仍然沒有消掉???我們仍可以再次更該枚舉項,對於d ,我們不去枚舉i,j ,因爲後面的限制使i,j 必須爲d 的倍數,所以我們不如直接枚舉d 的倍數,便成功省去了最後的限制:
∑d=1min(n,m)μ(d)∑i=1⌊nd⌋∑j=1⌊md⌋=∑d=1min(n,m)μ(d)⌊nd⌋⌊md⌋
爲什麼上面的式子中i,j 的上限變小了?上面說到,我們直接枚舉d 的倍數,反映到式子中就變成了枚舉係數,即原來的i 變成了i×d ,j 變成了j×d 。最後由於和號已經沒有限制了,我們便直接將其轉化爲多項式。
3.下底分塊
上面得到的式子是可以O(n) 得到答案的,但是一般的莫比烏斯反演都有多組詢問,每次都O(n) 計算的話就只能乖乖TLE 。
觀察上面的式子,發現對於一個n ,存在一段區間[l,r] 使得⌊nl⌋=⌊nr⌋=k 且對於這個區間外的其它值else ,均有⌊nelse⌋≠k 。
這樣,對於上述的一個區間[l,r] ,∑ri=l⌊ni⌋ 是一個定值,應用到上面的式子中,就可以把[1,n] 劃分成n−−√ 個區間快速求解。
先給個結論,當我們已知l 時,有r=n⌊nl⌋ ,證明如下:
設n=kl+x1=kr+x2且l,r<k
先由定義算出r :
∴l=n−x1k,r=n−x2k
∴r−l=x1−x2k
∴r=l+x1−x2k
∵x2<k,k|(x1−x2)
∴x1−x2k=⌊x1k⌋
∴r=l+⌊x1k⌋
再對等式右邊進行變形:
∵⌊nl⌋=⌊nr⌋=k
∴r=nk=l+⌊x1k⌋
綜上:r=n⌊nl⌋
證畢。
4.提出公因數
基本上是處理這種情況:
∑i=1n∑j=1m[gcd(i,j)=x]
對於這種式子我們是不方便求解的,需要把判定條件改爲[gcd(i,j)=1] ,才能使用後面要講的性質3進一步推導。那麼,我們不如將x 當做“公因數”提出去:
∑i=1n∑j=1m[gcd(i,j)=x]=∑i=1⌊nx⌋∑j=1⌊mx⌋[gcd(i,j)=1]
其本質上也可以看做是一種更換枚舉項的技巧,我們不去枚舉i,j ,直接枚舉x 的倍數,由於要求gcd(i,j)=x ,直接枚舉x 的倍數後就變成要求gcd(i,j)=1 了。
同樣的,我們觀察操作2中講到的變形:
∑i=1n∑j=1m[d|gcd(i,j)]
也可以理解爲提出了d ,式子變成:
∑i=1⌊nd⌋∑j=1⌊md⌋[1|gcd(i,j)]
由於[1|gcd(i,j)] 相當於沒有,所以就變成了上面講到的樣子。
但是,對於和號後不止一個判定條件,而是有其他式子時,提公因式時沒有這麼簡單:
∑i=1n∑j=1mij[d=gcd(i,j)]
提公因式的本質爲縮小枚舉範圍,在只有判定條件的時候,對於“計數”時沒有影響的,但是在有了其他式子時,其他的式子在範圍縮小後值也變小了,這樣“求和”得到的結果就不對了,所以我們應該像普通提公因式的操作方式,給予”補償”:
d2∑i=1⌊nd⌋∑j=1⌊md⌋ij[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)μ(i)−f(i)+μ(i)T∈Pi mod p[j]=0i mod p[j]≠0
只要對函數的討論清晰,一般還是沒什麼問題。
6.替換未知數
有些時候會見到,這種形狀:
ans=∑P∑d=1min(⌊np⌋,⌊mp⌋)μ(d)⌊ndp⌋⌊mdp⌋
又或者是:
ans=∑d=1nd∑d′=1nμ(d′)⌊ndd′⌋⌊ndd′⌋
注意到諸如dp,dd′ 的形狀看起來非常不爽,不如替換掉,以上面的第二個式子爲例,設T=dd′ ,代入:
ans=∑d=1n∑d′=1nμ(Td)d⌊nT⌋⌊nT⌋
再枚舉T :
ans=∑T=1n∑d|Tμ(Td)d⌊nT⌋⌊nT⌋
利用下面講到的結論4,即可化簡爲:
ans=∑T=1nφ(T)⌊nT⌋⌊nT⌋
本質上,替換未知數也是爲了方便更換枚舉項。
7.對特定形狀的替換
如果說上面講到的都是“普遍”形狀,在求和算式中常常用到。
那麼“特定”形狀就是一些具有特別長相的式子,需要識別出來加以替換以進行下一步化簡,下面介紹的性質和結論都是這樣一類特殊的式子。
常用的性質與結論
1.莫比烏斯函數的定義
在上面線篩莫比烏斯函數的博客中提到了莫比烏斯函數的通俗定義:
(1)莫比烏斯函數μ(n) 的定義域是N+
(2)μ(1)=1
(3)當n存在平方因子時,μ(n)=0
(4)當n是素數或奇數個不同素數之積時,μ(n)=−1
(5)當n是偶數個不同素數之積時,μ(n)=1
然而莫比烏斯函數的真正定義是這樣的:
∑d|xμ(d)={10x=1x>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′=1 即x=d′ 時∑d|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=1x∑d|gcd(i,x)μ(d)
我們直接枚舉d :
∑i=1x∑d|gcd(i,x)μ(d)=∑d|x∑i=1xμ(d)[d|gcd(i,x)]
考慮直接枚舉d 的倍數,而不是去枚舉i :
∑d|x∑i=1xμ(d)[d|gcd(i,x)]=∑d|x∑i=1xdμ(d)
因爲μ(d) 只與d 有關,可以提前:
∑d|x∑i=1xdμ(d)=∑d|xμ(d)∑i=1xd=∑d|xμ(d)xd
對於我們枚舉的d|x ,顯然xd 與d 是等價的,所以最後化簡爲:
φ(x)=∑d|xμ(xd)d
證畢。
歐拉函數實際應用中出現頻率不是很高,但在化簡時若見到上述形狀可以嘗試進行替換。
5.約數個數函數σ0(x)
神奇性質如下:
σ0(nm)=∑x|n∑y|m[gcd(x,y)=1]
設n=∏ki=1paii,m=∏ki=1pbii
∴nm=∏ki=1pai+bii
∴σ0(nm)=∏ki=1(ai+bi+1)
對於n,m ,若前i 個質因子的貢獻爲W ,考慮第i+1 個質因子對答案的貢獻:
選取pi+1 的方案分別爲:
1.由x 選取,那麼可以選1∼ai+1 個pi+1 ,方案數爲ai+1 個;
2.由y 選取,那麼可以選1∼bi+1 個pi+1 ,方案數爲bi+1 個;
3.都不選,方案數爲1 ;
所以選取pi+1 的方案數總和爲ai+1+bi+1+1 個。
故最後的方案數爲:
∏i=1k(ai+bi+1)
證畢。
後記
如果有更多的技巧與結論,博主會更新。