話說這是我打的第一篇算法博客2333
話不多說直接進入正題
一、莫比烏斯函數μ
什么是μ?
μ(n)={
1,n=1;
(-1)k,n=p1*p2*p3*……*pk ,pn為互不相等的質數;
0,else;
}
μ的性質:
1、積性函數:線性篩
在線性篩質數的基礎上加幾句處理就好了

void get() { mu[1]=1; for(int i=2;i<=10000000;i++) { //cout<<i<<endl; if(!p[i]) { mu[i]=-1; prime[++cnt]=i; } for(int j=1;prime[j]*i<=10000000&&j<=cnt;j++) { p[prime[j]*i]=1; if(i%prime[j]==0)break; mu[i*prime[j]]=-mu[i]; } } }
2、Σi|nμ(i)=(n==1)
二、狄利克雷卷積
給定三個數論函數f,g,h,如果滿足h(n)=Σd|nf(d)*g(n/d),那么我們稱h=f*g,讀作f卷g
狄利克雷卷積的性質:
1、交換律 f*g=g*f
2、結合律 f*g*h=f*(g*h)
3、分配律 f*(g+h)=f*g+f*h
三、積性函數的狄利克雷卷積特殊性質
積性函數指對於所有互質的整數a和b有性質f(ab)=f(a)f(b)的數論函數。
常見積性函數:
μ
φ
d d(n)=Σk|n1
δ δ(n)=Σk|nk
還有三個及其重要的完全積性函數,就是說任意a,b,滿足f(a)*f(b)=f(a*b),他們是
e e(n)=(n==1)(這個函數也有管他叫ε的,但他太難打了,就叫e吧)
I I(n)=1
id id(n)=n
不要看他們式子簡單,他們可是莫比烏斯反演的核心,建議找張紙把他們抄下來,免得忘
根據上面的狄利克雷卷積,我們有
μ*I=e
又由e的式子,我們有
f*e=f,f是任意數論函數
然后就開始推式子了
設f=g*I,f,g均為積性函數
在兩邊同時卷上μ,則
f*μ=g*I*μ
I*μ=e,g*e=g
所以有 f*μ=g
即:
若f=g*I,則g=f*μ
然后就是上述幾個積性函數的綜合
μ*I=e
φ*I=id===>φ=id*μ
I*I=d
I*id=δ
四、數論分塊
給定n,求(Σd=1n ⌊n /d⌋)%998244353,n<=1e14
直接枚舉gg
考慮優化
我們發現,⌊n/d⌋是有可能等於⌊n/(d+1)⌋的
那我們為什么要重復算呢??
直接加就好了!!
那也就是說,對於一個i,我們要找到一個j,使得⌊n/i⌋=⌊n/(i+1)⌋=⌊n/(i+2)⌋=……=⌊n/j⌋!=n/(j+1)
那么,根據數學的一頓亂搞,我們得出
j=⌊n/(⌊n/i⌋)⌋
於是就可以優化了
可以證明優化的幅度是O(sqrt(n))的,但我不會
那就代碼了

for(ll i=1,j;i<=n;i=j+1) { j=n/(n/i); ans=(ans+(j-i+1ll)%M*(n/i)%M)%M; }
五、莫比烏斯反演
先來一道熱身題:
求Σi=1nΣj=1mgcd(i,j)==1,n,m<=1e7,T<=1e4
可以先自己試一試
開始化簡
后面等於1的形式一看就是e
考慮e=I*μ
則原式=Σi=1nΣj=1mΣd|gcd(i,j)μ(d)
考慮枚舉d
Σd=1min(n,m)μ(d)*Σi=1nΣj=1md|gcd(i,j)
考慮d|gcd(i,j)的意義
當且僅當d|i&&d|j時,d|gcd(i,j)
因此,原式可化為
Σd=1min(n,m)μ(d)*Σi=1nd|iΣj=1md|j
加個括號
Σd=1min(n,m)μ(d)*(Σi=1nd|i)*(Σj=1md|j)
(Σi=1nd|i)=⌊n/d⌋,(Σj=1md|j)=⌊m/d⌋
因此原式可化為