可能最常見的定義式是這樣的:
\[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\)我們就可以不考慮它了。\(\text\)所以情況只剩下選擇不同的\(p_i\)了,等式就變成了我們選幾個不同的素因子:\(\sigma c_n^i (-1)^i\),我們直接二項式定理可以得到等式\(=(-1+1)^n=0\)。
\(n=1\) 時的證明顯然。
題意:求:
\[\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,對答案沒有任何貢獻。所以我們來看看那些是互異素數乘積的數,每乙個成為它約數的數是什麼樣...