FSYo講數論函數 ,Orz
一些數論積性函數
莫比烏斯函數,\(\mu\) 函數
\[\mu= \begin{cases} 1,&n=1\\ (-1)^c,&n=\prod_{i=1}^c p\\ 0,&n=k^2t \qquad (k>1) \end{cases} \]
元函數,\(\varepsilon\) 函數
\[\varepsilon= \begin{cases} 1,&n=1\\ 0,&n\ne1 \end{cases} \]
單位函數,\(id\) 函數
\[id=n \]
恆等函數,\(I\) 函數
\[I=1 \]
歐拉函數,\(\varphi\) 函數
\[\varphi=\sum_{d\leq n}[\gcd(d,n)=1] \]
因子和函數,\(\sigma\) 函數
\[\sigma=\sum_{d\mid n}d \]
約數個數,\(d\) 函數
\[d=\sum_{d\mid n} 1 \]
狄利克雷卷積
\[h=f\ast g \]
\[h(n)=\sum_{d\mid n}f(d)g(\frac nd) \]
兩個積性函數做狄利克雷卷積得到的也是積性函數。
整除分塊
blog
在莫比烏斯反演中廣泛使用,推完的式子中經常出現,可以將 \(O(n)\) 優化至 \(O(\sqrt n)\),如果有多個整除也可以用,例如:
for(int l=1,r=min(n/(n/l),m/(m/l));;){
//dosomething
l=r+1;if(l>mn)break;
r=min(n/(n/l),m/(m/l));
}
另外有個東西是 \(\lfloor\dfrac{\lfloor\dfrac{b}{k}\rfloor}{l}\rfloor=\lfloor\dfrac{{b}}{kl}\rfloor\)
考慮一下 \(\lfloor\dfrac{b}{k}\rfloor\) 和 \(\dfrac{b}{k}\) 對於整除 \(l\) 的區別,\(\dfrac{b}{k}=\lfloor\dfrac{b}{k}\rfloor+\{\dfrac{b}{k}\}\),顯然后面的小數對於整除 \(l\) 是沒有影響的,所以就有 \(\lfloor\dfrac{\lfloor\dfrac{b}{k}\rfloor}{l}\rfloor=\lfloor\dfrac{\dfrac{b}{k}}{l}\rfloor\) 了。
神秘的知識
一些數論函數的卷積
\(I\ast I=d\)
\(I\ast id=\sigma\)
\(\varepsilon\ast I_k=I_k\)
\(d(ij)=\sum\limits_{x\mid i}\sum\limits_{y\mid j}[\gcd(x,y)=1]\)
考慮枚舉 \(xy\) 是 \(ij\) 的約數,視為 \(\prod\limits^tp_i^{k_i}\) 那么每個 \(p_i^{k_i}\) 應保證只會被一種方式枚舉到。
我們規定 \(k_i\) 個 \(p_i\) 優先在 \(x\) 中選,假設 \(x\) 中 \(p_i\) 的個數為 \(c\),那么 \(k_i\le c\) 時,只有 \(x\) 中被選到了,當 \(k_i>c\) 時 \(x\) 中被選完,剩下的在 \(y\) 中選,我們把在 \(x\) 中被選完,\(y\) 中選 \(d\) 個映射到只在 \(y\) 中選 \(d\) 個,於是此時 \(\gcd(x,y)=1\),也就是式子中的枚舉方法是正確的。
\(\varphi\ast I=id\)
證
即 \(n=\sum\limits_{d\mid n}\varphi(d)\).
考慮這樣的分數約分:
\[\frac{1}{12},\frac{2}{12},\frac{3}{12},\frac{4}{12},\frac{5}{12},\frac{6}{12},\frac{7}{12},\frac{8}{12},\frac{9}{12},\frac{10}{12},\frac{11}{12},\frac{12}{12}\\ \frac{1}{12},\frac{1}{6},\frac{1}{4},\frac{1}{3},\frac{5}{12},\frac{1}{2},\frac{7}{12},\frac{2}{3},\frac{3}{4},\frac{5}{6},\frac{11}{12},\frac{1}{1} \]
發現很顯然,不會嚴格證,感覺證起來好麻煩,但是這樣理解起來就很清晰了。
\(I*\mu=\varepsilon\)
證
\[I\ast \mu=\sum_{d\mid n}\mu(d) \]
求和寫出來應該是 \(1+(-1)+1+\cdots\) 這樣 \(1\) 和 \(-1\) 的和。
假設 \(n=\prod\limits^{t} p_i^{k_i}\),那么考慮每個 \(p_i\) 的選或不選,有貢獻的 \(d\) 一共就有 \(2^t\) 個。
然后選奇數個 \(p\) 的貢獻為 \(-1\),選偶數個 \(p\) 的貢獻為 \(1\),那么就是 \(\dbinom t0-\dbinom t1+\dbinom t2-\cdots\),也就是 \(\sum\limits_{i=0}^{t}(-1)^i\dbinom ti\) ,發現是二項式定理的形式,也就是 \((1-1)^t\),也就是 \([t=0]=\varepsilon(t)\),所以 \(I\ast \mu=\varepsilon\)。
\(id\ast\mu=\varphi\)
證
我們有
\(\varphi\ast I=id\)
左右兩邊都卷個 \(\mu\)
\(\varphi\ast I\ast\mu=id\ast\mu\)
於是
\(id\ast\mu=\varphi\)
莫比烏斯反演
\[F(n)=\sum_{d\mid n}f(d)\Rightarrow f(n)=\sum_{d\mid n}\mu(d)F(\frac nd) \]
證
\[F=f\ast I \]
\[\mu\ast F=f\ast I\ast\mu \]
\[f=\mu\ast F \]
基操
\[\sum_{i=1}^{n}\sum_{j=1}^{n}[\gcd(i,j)=1]\\ =\sum_{i=1}^{n}\sum_{j=1}^{n}\varepsilon(\gcd(i,j))\\ =\sum_{i=1}^{n}\sum_{j=1}^{n}I*\mu(\gcd(i,j))\\ =\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{d\mid \gcd(i,j)}\mu(d)\\ =\sum_{d=1}^{n}\mu(d)\sum_{i=1,d\mid i}^{n}\sum_{j=1,d\mid j}^n1\\ =\sum_{d=1}^n\mu(d)(\frac{n}{d})^2 \]
這個可以用在儀仗隊那道題里。
例題
BZOJ2694/BZOJ4659
#2694. Lcm
設\(S(n)=\sum\limits_{i=1}^{n}i\),可以 \(O(1)\) 計算
\[\begin{align*} &\sum_{i=1}^A\sum_{j=1}^{B}\mu(\gcd(i,j))^2\operatorname{lcm}(i,j)\\ &=\sum_{d=1}^n\sum_{d\mid i}^A\sum_{d\mid j}^B\mu^2(d)\frac{ij}{d}[\gcd(i,j)=d]\\ &=\sum_{d=1}^{n}\sum_{i=1}^{A/d}\sum_{j=1}^{B/d}\mu^2(d)ijd[\gcd(i,j)=1]\\ &=\sum_{d=1}^n\mu^2(d)d\sum_{i=1}^{A/d}\sum_{j=1}^{B/d}ij\sum_{l\mid\gcd(i,j)}\mu(l)\\ &=\sum_{d=1}^n\mu^2(d)d\sum_{l}^{n/d}\mu(l)l^2\sum_{i=1}^{A/ld}\sum_{j=1}^{B/ld}ij\\ &=\sum_{d=1}^n\mu^2(d)d\sum_{l}^{n/d}\mu(l)l^2\sum_{i=1}^{A/ld}\sum_{j=1}^{B/ld}ij\\ &=\sum_{d=1}^n\mu^2(d)d\sum_{l=1}^{n/d}\mu(l)l^2S(\frac A{ld})S(\frac B{ld})\\ &=\sum_{T=1}^{n}S(\frac AT)S(\frac BT)\sum_{d\mid T}\mu^2(d)d\mu(\frac Td)(\frac Td)^2 \end{align*} \]
左邊用整除分塊,最多 \(2(\sqrt A+\sqrt B)\) 塊,右邊枚舉最大質因子次數為1的 \(d\) ,至多 \(n\) 個,然后就是枚舉倍數,一共 \(\sum\limits_{d\le n}\dfrac nd\) 次,這個東西參考hrj給出的方法可以理解是 \(n\log n\) 的。

於是復雜度 \(O(4T\sqrt n+n\log n)\),可以過掉此題。
另外感性理解一下右邊那坨里面 \(\mu^2(d)d\) 和 \(\mu(d)d^2\) 都是積性函數,所以整個都可以直接線篩。於是就可以 \(O(4T\sqrt n+n)\) 做。在 \(1\) 處的值是 \(1\),在 \(p\) 處的值是 \(p-p^2\),在 \(p^2\) 處的值是 \(-p^3\),在 \(p^k(k>2)\) 的點值是 \(0\),所以可以先把 \(p\) 和 \(p^2\) 的值篩出來,再重新篩其他的,具體可以看代碼。
參考代碼
P1829
P1829 [國家集訓隊]Crash的數字表格
\[\begin{align*} &\sum_{i=1}^n\sum_{j=1}^m\operatorname{lca}(i,j)\\ &=\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{ij}{\gcd(i,j)}\\ &=\sum_{d=1}^{min(n,m)}\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}ijd[\gcd(i,j)=d]\\ &=\sum_{d=1}d\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}ij\sum_{l\mid\gcd(i,j)}\mu(l)\\ &=\sum_{d}d\sum_{l=1}^{n/d}\mu(l)l^2\sum_{i=1}^{n/ld}\sum_{j=1}^{m/ld}ij\\ &=\sum_dd\sum_l\mu(l)l^2S(\frac n{ld})S(\frac m{ld})\\ &=\sum_{T=1}^{n}S(\frac nT)S(\frac mT)\sum_{l\mid T}\mu(l)l^2(\frac Tl)\\ &=\sum_{T=1}^{n}TS(\frac nT)S(\frac mT)\sum_{l\mid T}\mu(l)l \end{align*} \]
前面的一樣可以整除分塊,於是我們來看 \(\sum\limits_{l\mid T}\mu(l)l\)。如果 \(\mu(l)l\) 也是積性函數就可以線性篩,我們把這個式子看做 \(\mu\) 點乘 \(id\),也就是 \((\mu\cdot id)\)。我們考慮讓它再卷上一個積性函數,如果得到的也是積性函數,那么這個函數也是積性函數。
我們讓它卷上一個 \(id\),那么 \((\mu\cdot id)\ast id\) 寫出來就是
\[\sum_{d\mid n}\mu(d)d*\frac nd\\ =n\sum_{d\mid n}\mu(d) \]
參考上面 \(I\ast \mu=\varepsilon\) 的證明,我們知道這個式子就是 \(\varepsilon\)。
也就是說,由 \((\mu\cdot id)\ast id=\varepsilon\) 得到 \((\mu\cdot id)\) 也是積性函數,於是 \(\sum\limits_{l\mid T}\mu(l)l\) 就可以線篩了,那么要線性篩一個積性函數,我們只需要知道它在 \(p^k\) 處的點值。
\(\sum\limits_{l\mid n}\mu(l)l\),我們發現只有 \(l=1\) 或 \(l=p\) 時有值,所以在 \(p^k\) 處的點值就是 \(1-p\)。好怪哦
參考代碼
P3327
P3327 [SDOI2015]約數個數和
\[\begin{align*} &\sum_{i=1}^n\sum_{j=1}^md(ij)\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{x\mid i}\sum_{y\mid j}[\gcd(x,y)=1]\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{x\mid i}\sum_{y\mid j}\sum_{d\mid\gcd(x,y)}\mu(d)\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid i,d\mid j}\mu(d)\sum_{d\mid x\mid i}\sum_{d\mid y\mid j}1\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid i,d\mid j}\mu(d)\sum_{x\mid\frac id}\sum_{j\mid\frac jd}1\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid i,d\mid j}\mu(d)d(\frac id)d(\frac jd)\\ =&\sum_{d=1}^{\min(n,m)}\mu(d)\sum_{i=1}^{n/d}d(i)\sum_{j=1}^{m/d}d(j) \end{align*} \]
令 \(S(x)=\sum\limits_{i=1}^xd(i)\),可以 \(O(n)\) 預處理,\(O(1)\) 查詢。
於是
\[\begin{align*} &\sum_{d=1}^{\min(n,m)}\mu(d)\sum_{i=1}^{n/d}d(i)\sum_{j=1}^{m/d}d(j)\\ =&\sum_{d=1}^{\min(n,m)}\mu(d)S(\lfloor\frac nd\rfloor)S(\lfloor\frac md\rfloor) \end{align*} \]
\(\mu\) 可以提前 \(O(n)\) 篩出來,然后右邊整除分塊,左邊 \(O(1)\) 查詢,總時間復雜度 \(O(n+T\sqrt n)\).
參考代碼
其他例題:
P3327 P2522 P1447