學習筆記 莫比烏斯反演

2022-02-23 21:03:46 字數 2914 閱讀 6579

可能最常見的定義式是這樣的:

\[f(x)=\sigma_f(x) \leftrightarrow f(x)=\sigma_\mu(x)f(x)

\\or

\\f(x)=\sigma_f(x) \leftrightarrow f(x)=\sigma_\mu(x)f(x)

\]但是這並不是我們\(oi\)的重點..之前一直學不會這個東西就是因為老研究這個去了(我才不會說是\(noip\)模擬賽有毒瘤出題人以這樣的形式讓我和莫比烏斯函式見面)

實際上我們喜歡的是這個性質

\[\sigma_\mu(n)=[n=1]

\]假如乙個式子裡有乘積+約數或者什麼什麼+布林值,那就套一下這個公式。

這個式子如何證明:

考慮列舉因數就相當於對於\(n=\prod p_i^\)選不同的乘起來,你知道當\(d\)在乙個\(p_i\)中選了超過一的指數,由於此時\(\exist x^2|n\)所以\(\mu(n)=0\)我們就可以不考慮它了。

所以情況只剩下選擇不同的\(p_i\)了,等式就變成了我們選幾個不同的素因子:\(\sigma c_n^i (-1)^i\),我們直接二項式定理可以得到等式\(=(-1+1)^n=0\)。

\(n=1\) 時的證明顯然。

\(\text​\)

題意:求:

\[\sigma_^n \sigma_^m [(i,j) \in p]

\](\([\ ]=\lfloor \rfloor\))

\[=\sigma_^n \sigma_^m [(i,j) \in p]

\\=\sigma_\sigma_^n\sigma_^m[(i,j)=x]

\\=\sigma_\sigma_^\sigma_^[(i,j)=1]

\\=\sigma_\sigma_^\sigma_^\sigma_\mu(d)

\\=\sigma_\sigma_^\mu(d)[n/dk][m/dk]

\\assuem:t=dk

\\=\sigma_\sigma_^\mu(d)[n/t][m/t]

\\=\sigma_^[n/t][m/t]\sigma_\mu(t/x)

\\assume:f(t)=\sigma_\mu(t/x)

\\=\sigma_^[n/t][m/t]f(t)

\]預處理\(f(t)\)陣列和他的字首和,就可以數論分塊\(o(n^)\)了。

怎麼處理\(f(t)\) 呢?可以考慮先定位乙個素數\(p\),然後直接\(for(i=1\text1e7)\),把所有\(f(p \times i)+=\mu(i)\)。複雜度\(o(n)?\)

#includeusing namespace std;

inline int qr()

const int maxn=1e7+5;

typedef long long ll;

bool usd[maxn];

int mu[maxn];

int f[maxn];

ll sum[maxn];

vector < int > pr;

#define pb push_back

inline void gen_mu()

for(auto i:pr)

for(int t=1;1ll*i*t< maxn;++t)

f[i*t]+=mu[t];

for(int t=1;t< maxn;++t) sum[t]=sum[t-1]+1ll*f[t];

}int main()

return 0;

}

先給個式子

\(d(ij)=\sigma_\sigma_[(x,y)=1]​\)

繼續\[=\sigma_i^n \sigma_j^md(ij)

\\=\sigma_i^n \sigma_j^m\sigma_\sigma_[(x,y)=1]

\\=\sigma_i^n \sigma_j^m\sigma_\sigma_\sigma_\mu(d)

\\=\sigma_i^n \sigma_j^m\sigma_\sigma_\sigma_^\mu(d) \times [d|(x,y)]

\\=\sigma_^\mu(d)\sigma_i^n \sigma_j^m\sigma_\sigma_[d|(x,y)]

\\=\sigma_^\mu(d)\sigma_x^n \sigma_y^m \lfloor \frac n x \rfloor\lfloor \frac m y\rfloor[d|(x,y)]

\\=\sigma_^\mu(d)\sigma_x^ \lfloor \frac n \rfloor\sigma_y^ \lfloor \frac m \rfloor

\]右邊有兩個\(floor​\),可以數論分塊。分塊後可以直接乘上一段\(\mu​\)的字首和。

#includeusing namespace std;   typedef long long ll;

template < class ccf > inline ccf qr(ccf ret)inline int qr()

#define pb push_back

const int maxn=5e4+5;

bool usd[maxn];

int mu[maxn];

int sum[maxn];

ll pre[maxn];

vector < int > pr;

inline void gen_mu()

for(register ll t=1;t< maxn;++t)

for(register ll l=1,r;l<=t;l=r+1)

r=t/(t/l),pre[t]+=1ll*(r-l+1)*(t/l);

}int main()

return 0;

}

莫比烏斯反演學習筆記

莫比烏斯反演是個很玄學的東西,這裡面的東西我都證明不來。眾所周知,oier只需要結論而不需要證明 首先定義莫比烏斯函式 i 這個函式取值是這樣的 當 i 1 時,mu i 1 當 i prod limits p i 時且 p i 為兩兩不同的質數,mu i 1 k 若都不滿足,mu i 0 接下來可...

莫比烏斯反演 二 莫比烏斯反演定理

首先設兩個任意函式f x 和f x 定義運算 f x sum f d 這時就可以用f x 表示f x f 1 f 1 f 2 f 1 f 2 f 3 f 3 f 1 f 4 f 4 f 2 f 1 f 5 f 5 f 1 f 6 f 6 f 3 f 2 f 1 這時可以試著用f x 表示f x f ...

莫比烏斯反演

首先 莫比烏斯函式有個性質 d n d 1 n 1 0 n 1 證明 n 1時,不做多餘說明。n 1 根據唯一分解定理,可以分解n ki 1pai i 對於那些含平方因子也就是存在ai 不為1的數,它的函式值為0,對答案沒有任何貢獻。所以我們來看看那些是互異素數乘積的數,每乙個成為它約數的數是什麼樣...