積性函數前綴和-個人總結
【寫在前面】
用了一個多星期將這部分大致弄懂了,東西太多,有很多技巧,自己重新寫了一下,記錄自己的理解。內容與原文基本一致,在其基礎上加上了一些我感覺比較重要的但他沒有詳細說明的東西。以下都是我逐字打出來的。如果有什么錯誤,請指出。——Simon
前置技能里面的東西需要充分理解和記憶,在后面推導過程中會多次用到前置技能里面的東西。
轉載出處:
author: skywalkert
original article: http://blog.csdn.net/skywalkert/article/details/50500009
【常用技巧】
\[\sum_{k=1}^n\sum_{d|k}d\cdot k=\sum_{k=1}^n\sum_{d=1}^{\frac nk}d\cdot k\cdot d=\sum_{d=1}^n\sum_{k|d}d\cdot \frac dk=\sum_{d=1}^n\sum_{k=1}^{\frac nd}d\cdot k\cdot d=\sum_{d=1}^n\sum_{d|k}d\cdot k=\sum_{k=1}^n\sum_{k|d} d\cdot\frac dk\\ 上式為約數,倍數之間重要的變換,需要充分理解並熟練運用。\\ \\1、遇到[gcd(i,j)=1],考慮將其轉換為\sum_{k|gcd(i,j)}\mu(k)\\ 2、對於\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=1]=2\sum_{i=1}^n\sum_{j=1}^i[gcd(i,j)=1]-\sum_{i=1}^n[gcd(i,i)=1]=\big(2\sum_{i=1}^n\varphi(i)\big)-1\\ 3、\sum_{i=1}^{n}i\sum_{j=1}^{n}[gcd(i,j)=1]\cdot j=2\sum_{i=1}^{n}i\sum_{j=1}^i[gcd(i,j)=1]\cdot j-\sum_{i=1}^n[gcd(i,i)=1]\cdot i\\ =\bigg(2\sum_{i=1}^ni\frac{i\cdot\varphi(i)+[i=1]}{2}\bigg)-1=\bigg(\sum_{i=1}^ni^2\cdot\varphi(i)+[i=1]\bigg)-1\\ 4、記w(n)為n的質因子個數,則2^{w(n)}為n的約數中無平方因子的個數,則f(n)=2^{w(n)}=\sum_{d|n}\mu^2(d)\\ 則\sigma_0(n^2)=\sum_{d|n}f(d)=\sum_{d|n}\sum_{k|d}\mu^2(k),附個表\sum_{i=1}^{10}\sigma(i^2)\\ 5、n 以內不含平方因子的數的個數g(n)=\sum_{i=1}^n\mu^2(i)=\sum_{i=1}^{\sqrt{n}}\mu(i)\cdot\lfloor\frac n{i^2}\rfloor\\ 6、\sum_{d|n}\sum_i^{\frac{n}{d}}=\sum_{d|n}\sum_i^{d},且d|n可以用埃篩預處理,i為d,j為n。\\ 7、\sigma_0(i\cdot j)=\sum_{d|i\cdot j}=\sum_{x|i}\sum_{y|j}[gcd(i,j)=1],\sigma_1(i\cdot j)=\sum_{d|i\cdot j}d=\sum_{x|i}\sum_{y|j}\frac{y\cdot n}{x}[gcd(i,j)=1] \\8、若a>b,\ gcd(a,b)=1,則有gcd(a^m-b^m,a^n-b^n)=a^{gcd(n,m)}-b^{gcd(n,m)}。 \]
證明7:
\[令x=i\cdot j,則由唯一分解定理得:x=p_1^{e_1}p_2^{e_2}\dots p_n^{e_k},則x的約數個數為(e_1+1)\cdot(e_2+1)\dots(e_k+1)\\ 考慮任意一個質數p對答案的貢獻。假設質數p在i的質因數中出現了a次,在j的質因數中出現了b次,那么p對答案\\的貢獻就為a+b+1。而a+b+1=\sum_{x=0}^a\sum_{y=0}^b[gcd(p^x,p^y)=1],等效與以下矩陣:a=2,b=3\\ \left(\begin{matrix} 1&1&1&1\\ 1&p&p&p\\ 1&p&p^2&p^2 \end{matrix}\right)\\ 相當於對於素數p來說,不同時出現於兩個數的質因數中。 \\ 由唯一分解定理又得:i=p_1^{e_1}p_2^{e_2}p_3^{e_3}...p_k^{e_k},j=p_1^{q_1}p_2^{q_2}p_3^{q_3}...p_k^{q_k},根據乘法原理可得:\\ \sigma_0(i\cdot j)=\sum_{x_1=0}^{e_1}\sum_{y_1=0}^{q_1}[(p_1^{x_1},p_1^{y_1})=1]\sum_{x_2=0}^{e_2}\sum_{y_2=0}^{q_2}[(p_2^{x_2},p_2^{y_2})=1]...\sum_{x_n=0}^{e_n}\sum_{y_n=0}^{q_n}[(p_n^{x_n},p_n^{y_n})=1]\\將其合並得:\sigma_0(i\cdot j)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\\ 對於任意一個素數p來說,它們不同時出現於x,y中,就相當於gcd(x,y)=1。 \]
\[\sigma_1(n\cdot m)=\sum_{a|n\cdot m}a\\=\sum_{k=1}^r\sum_{c\big|\frac{nm}{P_k^{x_k+y_k}}}\sum_{a|P_k^{x_k+y_k}}ac\\=\sum_{a_1\big|P_1^{x_1+y_1}}\sum_{a_2\big|P_2^{x_2+y_2}}...\sum_{a_r\big|P_r^{x_r+y_r}}\Big(\prod_{i=1}^ra_i\Big) \\對於某個素數p_k: \sum_{a\big | P_k^{x_k+y_k}}a=\sum_{a|P_{k}^{x_k}}\sum_{b|P_{k}^{y_k}}[ gcd(a,b)=1]\frac{P_{k}^{x_k}b}{a}\\所以:\sigma_1(n\cdot m)=\sum_{a|n}\sum_{b|m}\frac{n\cdot b}{a}[gcd(a,b)=1] \]
2、
10
1 1 1 1 1 1 1 1 1 1
1 0 1 0 1 0 1 0 1 0
1 1 0 1 1 0 1 1 0 1
1 0 1 0 1 0 1 0 1 0
1 1 1 1 0 1 1 1 1 0
1 0 0 0 1 0 1 0 0 0
1 1 1 1 1 1 0 1 1 1
1 0 1 0 1 0 1 0 1 0
1 1 0 1 1 0 1 1 0 1
1 0 1 0 0 0 1 0 1 0
4、
1 1
1 2 4 1 1 2
1 3 9 1 1 3
1 2 4 8 16 1 1 2 1 2
1 5 25 1 1 5
1 2 3 4 6 9 12 18 36 1 1 2 1 3 1 2 3 6
1 7 49 1 1 7
1 2 4 8 16 32 64 1 1 2 1 2 1 2
1 3 9 27 81 1 1 3 1 3
1 2 4 5 10 20 25 50 100 1 1 2 1 5 1 2 5 10
48 48
【前置技能】
【積性函數的定義】
- 若\(f(n)\)的定義域為正整數域,值域為復數,即\(f:Z^+→C\),則稱\(f(n)\)為數論函數。
- 若\(f(n)\)為數論函數,且\(f(1)=1\),對於互質的正整數\(p,q\)有\(f(p⋅q)=f(p)⋅f(q)\),則稱其為積性函數。
- 若\(f(n)\)為積性函數,且對於任意正整數\(p,q\)都有\(f(p⋅q)=f(p)⋅f(q)\),則稱其為完全積性函數。
【積性函數的性質與例子】
- 若\(f(n)\)為積性函數,則對於正整數\(n=\prod_{i=1}^tp_i^{e_i}\)有\(f(n)=\prod_{i=1}^tf(p_i^{e_i})\);若f(n)為完全積性函數,則對於正整數\(n=\prod_{i=1}^tp_i^{e_i}\)有\(f(n)=\prod_{i=1}^tf(p_i)^{e_i}\)。
- 常見的積性函數有:
- 除數函數\(\sigma_k(n)=\sum_{d|n}d^k\),表示n的約數的k次冪和,注意\(\sigma_k(n)\)與\(\sigma^k(n)\)是不同的。
- 由唯一分解定理得:\(n=\prod_{i=1}^tp_i^{e_i}\)。則\(\sigma_k(n)=\prod_{i=1}^t\sigma_k(p_i^{e_i})=\prod_{i=1}^t \sum_{d|p_i^{e_i}}d^k=\prod_{i=1}^t(1+p^k+p^{2k}+p^{3k}+\dots+p^{e_ik})\)
- 約數個數函數\(τ(n)=σ_0(n)=∑_{d|n}1\),表示\(n\)的約數個數,一般也寫為\(d(n)\)。
- \(\sigma_0(n)=\prod_{i=1}^t\sigma_0(p_i^{e_i})=\prod_{i=1}^t(1+p^0+p^0+p^0+\dots+p^{0})=\prod_{i=1}^te_i+1\)。
- 約數和函數\(σ(n)=σ_1(n)=∑_{d|n}d\),表示\(n\)的約數之和。
- \(\sigma_1(n)=\prod_{i=1}^t(1+p^1+p^2+p^3+\dots+p^{e_i})\)。\(ps:\)括號內的可以用等比數列求和公式簡化。
- 歐拉函數\(\varphi(n)=\sum_{i=1}^n[(n,i)=1]\cdot1\),表示不大於\(n\)且與\(n\)互質的正整數的個數,另外\(\sum_{i=1}^n[(n,i)=1]\cdot i=\frac{n\cdot \varphi(n)+[n=1]}2\),且對於正整數\(n>2\)來說\(\varphi(n)\)是偶數。
- \(n\ne1時,2\sum_{i=1}^n[(n,i)=1]\cdot i=\sum_{i=1}^n[(n,i)=1]\cdot i+\sum_{i=1}^n[(n,i)=1]\cdot(n-i)=\\ \sum_{i=1}^n[(n,i)=1]\cdot n=n\sum_{i=1}^n[(n,i)=1]=n\cdot\varphi(n),則\sum_{i=1}^n[(n,i)=1]\cdot i=\frac{n\cdot \varphi(n)}{2}\)
- 莫比烏斯函數\(μ(n)\),在狄利克雷卷積的乘法中與恆等函數互為逆元,\(μ(1)=1\),對於無平方因子數\(n=∏^t_{i=1}p_i\)有\(μ(n)=(−1)^t\),對於有平方因子數\(n\)有\(μ(n)=0\)。
- 元函數 \(e(n)=[n=1]\),狄利克雷卷積的乘法單位元,完全積性。
- 恆等函數\(I(n)=1\),完全積性。
- 單位函數\(id(n)=n\),完全積性。
- 冪函數\(id^k(n)=n^k\),完全積性。
- 關於莫比烏斯函數和歐拉函數有兩個經典的公式
- \([n=1]=∑_{d|n}μ(d)\),將\(μ(d)\)看作是容斥的系數即可證明。
- \(n=∑_{d|n}φ(d)\),將\(\frac in(1≤i≤n)\)化為最簡分數統計個數即可證明。
【狄利克雷卷積與莫比烏斯反演】
- 數論函數\(f\)和\(g\)狄利克雷卷積定義為\((f∗g)(n)=∑_{d|n}f(d)⋅g(\frac nd)\),狄利克雷卷積滿足交換律\(((f*g)(n)=(g*f)(n)=\sum_{d|n}g(d)f(\frac nd))\)、結合律\((f*g*h=f*(g*h))\),對加法滿足分配律,存在單位元函數\(e(n)=[n=1]\)使得\(f∗e=f=e∗f\),若\(f\)和\(g\)為積性函數則\(f∗g\)也為積性函數。
- 狄利克雷卷積的一個常用技巧是對於積性函數\(f\)與恆等函數\(I\)的卷積的處理,例如\(n=\prod_{i=1}^tp_i^{e_i},(f*I)(n)=\sum_{d|n}f(d)I(\frac nd)=\sum_{d|n}f(d)=\prod_{i=1}^t\sum_{j=0}^{e_i}f(p_i^j)\)。
- 莫比烏斯反演也是對於\(g(n)=∑_{d|n}f(d)(g=f*I)\) 的討論,但是不要求\(f\) 是積性函數,適用於已知\(g(n)\)求\(f(n)\) 的情況,由於\((I*\mu)(n)=\sum_{d|n}\mu(d)=e(n)\),則\(g*\mu=(f*I)*\mu=f*(I*\mu)=f*e=f\),即若\(g=f*I\),則\(f(n)=(g*\mu)(n)=\sum_{d|n}g(d)\cdot\mu(\frac nd)\),類似的有\(g(n)=\sum_{n|d}f(d)\Rightarrow f(n)=\sum_{n|d}g(d)\cdot\mu(\frac dn)\),二項式反演也是類似的技巧。有一個例子可以看出歐拉函數和莫比烏斯函數之間的關系,由於\(\sum_{d|n}\varphi(d)=id(n)\),所以\(\varphi(n)=\sum_{d|n}\mu(d)\cdot\frac nd\),即\(\frac{\varphi(n)}n=\sum_{d|n}\frac{\mu(d)}d\)。
【正文:黑科技】
這種黑科技在低於線性時間的復雜度下解決一類積性函數的前綴和問題。
首先看一個簡單的例子,求前\(n\)個正整數的約數之和,即\(∑^n_{i=1}σ(i)\),其中\(n≤10^{12}\)。顯然不能直接做了,但是我們可以推導一番:
\[方法1:\sum_{i=1}^n\sigma(i)=\sum_{i=1}^n\sum_{d|i}d=\sum_{d=1}^nd\sum_{i=1}^\frac nd=\sum_{i=1}^ni\cdot\lfloor\frac ni\rfloor\\ 方法2:\sum_{i=1}^n\sigma(i)=\sum_{i=1}^n\sum_{d|i}d=\sum_{i=1}^n\sum_{d=1}^{\frac ni}d=\sum_{i=1}^n\frac{\lfloor\frac ni\rfloor\cdot (\lfloor\frac ni\rfloor+1)}{2} \]
當\(i\le \sqrt{n}\)時,\(\lfloor\frac ni \rfloor\)顯然只有\(O(\sqrt{n})\)個取值;當\(i\ge\sqrt{n}\)同樣;對於固定的\(\lfloor\frac ni\rfloor\),\(i\)的取值是一段連續的區間,這段區間是\([\bigg\lfloor\frac{n}{\lfloor\frac ni \rfloor+1}\bigg\rfloor+1,\bigg\lfloor\frac{n}{\lfloor\frac ni \rfloor}\bigg\rfloor ]\),因此可以\(O(\sqrt{n})\)求得。例\(n=10\)時:\(\sum_{i=1}^n\sigma(i)=1\times10+2\times5+3\times3+4\times2+5\times2+6\times1+7\times1+8\times1+9\times1+10\times1\),則\(\sum_{i=1}^n\sigma(i)=10\times1+5\times2+3\times3+2\times(4+5)+1\times(6+7+8+9+10)\)。
求前n個正整數的約數個數之和也類似:
\[\sum_{i=1}^n\sigma_0(i)=\sum_{i=1}^n\sum_{d|n}1=\sum_{d=1}^n\sum_{i=1}^\frac nd1=\sum_{d=1}^n\lfloor\frac nd\rfloor \]
現在我們來加大一點難度,(51Nod 1239)求前\(n\)個正整數的歐拉函數之和,即\(\Phi(n)=∑^n_{i=1}φ(i)\),其中\(n≤10^{11}\)。
對於\(\varphi(i)\),我們知道\(\sum_{d|n}\varphi(d)=n\),即\((\varphi*I)(n)=\sum_{d|n}\varphi(d)I(\frac nd)=\sum_{d|n}\varphi(d)=n\),則
\[\frac{n\cdot(n+1)}{2}=\sum_{i=1}^ni=\sum_{i=1}^n(\varphi*I)(i)=\sum_{i=1}^n\sum_{d|n}\varphi(d)=\sum_{i=1}^n\sum_{d=1}^{\frac ni}\varphi(d)=\sum_{i=1}^n\Phi(\lfloor\frac ni\rfloor) \]
對於\(\sum_{i=1}^n\Phi(\lfloor\frac ni\rfloor)\),如果\(i=1\)則即是我們要求的\(\Phi(n)\)。
\[則\Phi(n)=\sum_{i=1}^n\Phi(\lfloor\frac ni\rfloor)-\sum_{i=2}^n\Phi(\lfloor\frac ni\rfloor)=\frac{n\cdot (n+1)}2-\sum_{i=2}^n\Phi(\lfloor \frac ni\rfloor) \]
由於\(\Phi(n)\)是一個積性函數的前綴和,所以篩法也可以預處理一部分。所以總復雜度為\(O(n^{\frac 23})\)。
如果能通過狄利克雷卷積構造一個更好計算前綴和的函數,且用於卷積的另一個函數也易計算,則可以簡化計算過程。例如上題就是利用了\(φ∗I=id\)的性質,但一定注意,不是所有的這一類題都只用配個恆等函數\(I\)
就可以輕松完事的,有時需要更細致的觀察。
(51Nod 1244)定義梅滕斯函數\(M(n)=∑^n_{i=1}μ(i)\),給定正整數\(n\),計算\(M(n)\),其中\(n≤10^{11}\)。可以利用\(\mu*I=e\)的性質簡化
對於\(\mu(i)\),有\(\sum_{d|n}\mu(d)=[n=1]\),則\((\mu*I)(n)=\sum_{d|n}\mu(d)I(\frac nd)=[n=1]\),則
\[1=\sum_{i=1}^n[i=1]=\sum_{i=1}^n(\mu*I)(i)=\sum_{i=1}^n\sum_{d|n}\mu(d)=\sum_{i=1}^n\sum_{d=1}^{\frac ni}\mu(d)=\sum_{i=1}^nM(\lfloor\frac ni \rfloor)\\ 同理得: M(n)=\sum_{i=1}^nM(\lfloor\frac ni \rfloor)-\sum_{i=2}^nM(\lfloor \frac ni\rfloor)=1-\sum_{i=2}^nM(\lfloor\frac ni \rfloor) \]
同理復雜度為\(O(n^{\frac 23})\)。
(51Nod 1237)定義最大公約數之和的函數\(G(n)=\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\),給定正整數n,計算\(G(n)\),其中\(n\le10^{10}\)。
\[方法1:G(n)=\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)=\sum_{i=1}^n\sum_{j=1}^n\sum_{d=1}^n[gcd(i,j)=d]\cdot d=\sum_{d=1}^n\sum_{i=1}^{\frac nd}\sum_{j=1}^{\frac nd}[gcd(i,j)=1]\cdot d\\ 因為[gcd(i,j)=1]=\sum_{k|gcd(i,j)}\mu(k) \\ 則G(n)=\sum_{d=1}^n\sum_{i=1}^{\frac nd}\sum_{j=1}^{\frac nd}\sum_{k|gcd(i,j)}\mu(k)\cdot d=\sum_{k=1}^n\mu(k)\sum_{d=1}^{n}d\sum_{i=1}^{\frac n{kd}}\sum_{j=1}^{\frac n{kd}}1=\sum_{k=1}^n\mu(k)\sum_{d=1}^{ n}d\cdot\lfloor\frac n{kd}\rfloor^2\\ 令T=dk, 則得\sum_{T=1}^n\lfloor\frac n{T}\rfloor ^2\sum_{d|T}d\cdot\mu(\frac Td)\\ 再由n=id(n)=\sum_{d|n}\varphi(d), 則由莫比烏斯反演得\varphi(n)=\sum_{d|n}id(d)\cdot\mu(\frac nd)=\sum_{d|n}d\cdot\mu(\frac nd)\\ 則得\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor^2\varphi(T),剩下就是求歐拉函數前綴和了。 \]
\[方法2:G(n)=\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)=\sum_{i=1}^n\sum_{j=1}^n\sum_{d=1}^n[gcd(i,j)=d]\cdot d=\sum_{d=1}^n\sum_{i=1}^{\frac nd}\sum_{j=1}^{\frac nd}[gcd(i,j)=1]\cdot d\\ \sum_{d=1}^nd\sum_{i=1}^{\frac nd}\sum_{j=1}^{\frac nd}[gcd(i,j)=1]=\sum_{d=1}^nd\bigg(\big(2\sum_{i=1}^{\frac nd}\varphi(i)\big)-1\bigg),則剩下就是求歐拉函數前綴和了。\\ 對於\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=1]=2\sum_{i=1}^n\sum_{j=1}^i[gcd(i,j)=1]-\sum_{i=1}^n[gcd(i,i)=1]=\big(2\sum_{i=1}^n\varphi(i)\big)-1 \]
(51Nod 1238)定義最小公倍數之和的函數\(L(n)=\sum_{i=1}^n\sum_{j=1}^nlcm(i,j)\),給定正整數n,計算\(L(n)\),其中\(n\le10^{10}\)
\[方法1:L(n)=\sum_{i=1}^n\sum_{j=1}^nlcm(i,j)=\sum_{i=1}^n\sum_{j=1}^n\frac{i\cdot j}{gcd(i,j)}=\sum_{i=1}^n\sum_{j=1}^n\sum_{d=1}^n[gcd(i,j)=d]\frac{i\cdot j}{d}\\ =\sum_{d=1}^n\sum_{i=1}^{\frac nd}\sum_{j=1}^{\frac nd}[gcd(i,j)=1]i\cdot j\cdot d=\sum_{d=1}^n\sum_{i=1}^{\frac nd}\sum_{j=1}^{\frac nd}\sum_{k|gcd(i,j)}\mu(k)\cdot i\cdot j\cdot d=\sum_{d=1}^n\sum_{k=1}^{\frac nd}\sum_{i=1}^{\frac {n}{dk}}\sum_{j=1}^{\frac{n}{dk}}i\cdot j\cdot d\cdot\mu(k)\cdot k^2\\ =\sum_{d=1}^nd\sum_{k=1}^{\frac nd}\mu(k)\cdot k^2\sum_{i=1}^{\frac {n}{dk}}i\sum_{j=1}^{\frac{n}{dk}}j=\sum_{d=1}^nd\sum_{k=1}^{\frac nd}\mu(k)\cdot k^2\cdot\frac{(\lfloor\frac n{dk}\rfloor+1)^2\cdot \lfloor\frac n{dk}\rfloor^2}{4}\\ 然后就是求\mu(k)\cdot k^2的前綴和,但是這個方法時間復雜度過高好像為O(n)。\\此題不可行。后面有一道題要用此方法。 \]
\[方法2:L(n)=\sum_{i=1}^n\sum_{j=1}^nlcm(i,j)=\sum_{i=1}^n\sum_{j=1}^n\frac{i\cdot j}{gcd(i,j)}=\sum_{i=1}^n\sum_{j=1}^n\sum_{d=1}^n[gcd(i,j)=d]\frac{i\cdot j}{d}\\ =\sum_{d=1}^nd\sum_{i=1}^{\frac nd}\sum_{j=1}^{\frac nd}[gcd(i,j)=1]i\cdot j=\sum_{d=1}^nd\sum_{i=1}^{\frac nd}i\sum_{j=1}^{\frac nd}[gcd(i,j)=1]j\\ 因為\sum_{i=1}^{n}i\sum_{j=1}^{n}[gcd(i,j)=1]\cdot j=2\sum_{i=1}^{n}i\sum_{j=1}^i[gcd(i,j)=1]\cdot j-\sum_{i=1}^n[gcd(i,i)=1]\cdot i\\ =\bigg(2\sum_{i=1}^ni\frac{i\cdot\varphi(i)+[i=1]}{2}\bigg)-1=\bigg(\sum_{i=1}^ni^2\cdot\varphi(i)+[i=1]\bigg)-1\\ 則得\sum_{d=1}^nd\bigg(\big(\sum_{i=1}^{\frac nd}i^2\cdot\varphi(i)+[i=1]\big)-1\bigg)=\sum_{d=1}^nd\sum_{i=1}^{\frac nd}i^2\cdot\varphi(i),然后就是求\phi(n)=\sum_{i=1}^ni^2\cdot \varphi(i)。\\ 令f(n)=n^2\cdot \varphi(n),則\sum_{d|n}f*(id)^2(n)=\sum_{d|n}d^2\cdot\varphi(d)\cdot(\frac nd)^2=n^2\sum_{d|n}\varphi(d)=n^3\\ 則\frac {n^2\cdot(n+1)^2}4=\sum_{i=1}^ni^3=\sum_{i=1}^n(f*id^2)(i)=\sum_{i=1}^n\sum_{d|i}d^2\cdot\varphi(d)\cdot(\frac id)^2=\sum_{i=1}^ni^2\sum_{d=1}^{\frac ni}d^2\cdot\varphi(d)\\=\sum_{i=1}^ni^2\cdot\phi(\frac ni),則\phi(n)=\sum_{i=1}^ni^2\cdot \phi(\frac ni)-\sum_{i=2}^ni^2\cdot \phi(\frac ni)=\frac{n^2\cdot(n+1)^2}{4}-\sum_{i=1}^ni^2\cdot\phi(\frac ni)\\ 最終得L(n)=\sum_{d=1}^nd\cdot\phi(\frac nd) \]
(Tsinsen A1231)定義最小公倍數之和的函數\(L(n,m)=\sum_{i=1}^n\sum_{j=1}^m lcm(i,j)\),給定正整數n,m,計算\(L(n,m)\),其中\(n,m\le10^{7}\)
\[L(n)=\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)=\sum_{i=1}^n\sum_{j=1}^m\frac{i\cdot j}{gcd(i,j)}=\sum_{i=1}^n\sum_{j=1}^m\sum_{d=1}^n[gcd(i,j)=d]\frac{i\cdot j}{d}\\ =\sum_{d=1}^n\sum_{i=1}^{\frac nd}\sum_{j=1}^{\frac md}[gcd(i,j)=1]i\cdot j\cdot d=\sum_{d=1}^n\sum_{i=1}^{\frac nd}\sum_{j=1}^{\frac md}\sum_{k|gcd(i,j)}\mu(k)\cdot i\cdot j\cdot d=\sum_{d=1}^n\sum_{k=1}^{\frac nd}\sum_{i=1}^{\frac {n}{dk}}\sum_{j=1}^{\frac{m}{dk}}i\cdot j\cdot d\cdot\mu(k)\cdot k^2\\ =\sum_{d=1}^nd\sum_{k=1}^{\frac nd}\mu(k)\cdot k^2\sum_{i=1}^{\frac {n}{dk}}i\sum_{j=1}^{\frac{m}{dk}}j=\sum_{d=1}^nd\sum_{k=1}^{\frac nd}\mu(k)\cdot k^2\cdot\frac{\lfloor\frac n{dk}\rfloor\cdot(\lfloor\frac n{dk}\rfloor+1)\cdot \lfloor\frac m{dk}\rfloor\cdot(\lfloor\frac m{dk}\rfloor+1)}{4}\\ 到此時此題已經可以過了。復雜度為O(n).但其實還可以優化。\\將最后面的一部分記為sum(\frac n{dk},\frac m{dk}),\\ 則上式=\sum_{d=1}^nsum(\frac nd,\frac md)\sum_{k|d}\frac dk\cdot\mu(k)\cdot k^2,再令f(d)=\sum_{k|d}\frac dk\cdot\mu(k)\cdot k^2,\\因為積性函數的約數和也是積性函數,所以f數組可以預處理出來。 \\對於一個素數p,它的新 f 值顯然是 p - p^2 的\\ 如果 p 是多個素數的一次項的積\\ 顯然 f 是積性的 f( p ) = f( p1 ) * f( p2 ) * f( p3 )……\\ 如果 p 的唯一分解存在質因子的\\指數大於1,它新增的每一個因子的 μ 值都是0,沒有意義,\\只有統計時D變成了原來的 j 倍,所以 此時f( p ) = f( i ) * j\\ 前綴和在之后加一下就可以了\\ \]
不知道為什么顯然的看下面(類似)
積性函數的線性篩原理:
\[\because \sum_{d|n}\varphi(d)=n,則由莫比烏斯反演得\varphi(n)=\sum_{d|n}\mu(d)\cdot\frac{n}{d}=\sum_{d|n}\mu(\frac{n}{d})\cdot d\\ 由莫比烏斯函數的意義: \mu(n)=\left\{\begin{array}{ll} 1&若n=1\\ (-1)^k&若n無平方數因數,且n=p_1p_2\dots p_k\\ 0&若n有大於1的平方因數 \end{array}\right.\\可知,當n為素數時,\varphi(n)=\mu(n)\cdot 1+\mu(1)\cdot n=n-1 \\當n=p_1p_2\dots p_k,即無平方數因數,\varphi(n)=\varphi(p_1)\cdot\varphi(p_2)\cdot \dots\cdot\varphi(p_k)\\ 當n中有平方數因數時,平方數因數對\varphi(n)沒有貢獻即:\\ 假設n=i\cdot y,y是x的一個最小質因數則:\varphi(i)=\sum_{d|i}\mu(d)\frac {i}{d}\\ \varphi(n)=\varphi(i\cdot y)=\sum_{d|(i\cdot y)}\mu(d)\frac {i\cdot y}{d}=y\cdot \sum_{d|(i\cdot y)}\mu(d)\frac {i}{d}=y\cdot \varphi(i)\\ \\綜上\varphi(n)= \left\{\begin{matrix} n-1&n\in primes\\ f(i)\cdot y&y^2|n\\ f(i)\cdot f(y)&y^2 \not \mid n \end{matrix}\right.其中,y為n的最小質因數,並且n=i\cdot y \]
2019-ICPC-南京賽區-網絡賽E:令\(f_n(k)=\sum_{l_1=1}^n\sum_{l_2=1}^n\dots\sum_{l_k=1}^n gcd(l_1,l_2,\dots,l_k)\)。求\(\sum_{i=2}^kf_n(i)\ mod \ (10^9+7)\)。\(n\le 10^9,k\le 10^{10^5}\)。
對於\(f_n(k)\)有:
\[\sum_{l_1=1}^n\sum_{l_2=1}^n\dots\sum_{l_k=1}^ngcd(l_1,l_2,\dots,l_k)=\sum_{d=1}^n\sum_{l_1=1}^{\frac{n}{d}}\sum_{l_2=1}^{\frac{n}{d}}\dots\sum_{l_k=1}^{\frac{n}{d}}[gcd(l_1,l_2,\dots,l_k)=1]\cdot d^2 \\=\sum_{d=1}^nd^2\sum_{t=1}^{n}\mu(t)\sum_{l_1=1}^{\frac{n}{dt}}\sum_{l_2=1}^{\frac{n}{dt}}\dots\sum_{l_k=1}^{\frac{n}{dt}}=\sum_{d=1}^nd^2\sum_{t=1}^n\mu(t)\lfloor\frac{n}{dt}\rfloor^k \]
令\(T=dt\)得:
\[f_n(k)=\sum_{T=1}^{n}\sum_{t|T}\mu(t)\cdot\frac{T^2}{t^2}\cdot \lfloor\frac{n}{T}\rfloor^k \]
則\(\sum_{i=2}^kf_n(i)\)為:
\[\sum_{i=2}^kf_n(i)=\sum_{i=2}^k\sum_{T=1}^n\sum_{t|T}\mu(t)\cdot \frac{T^2}{t^2}\cdot \lfloor\frac{n}{T}\rfloor^k=\sum_{T=1}^n\sum_{t|T}\mu(t)\frac{T^2}{t^2}\sum_{i=2}^k\lfloor\frac{n}{T}\rfloor^k \\=\sum_{T=1}^n\sum_{t|T}\mu(t)\frac{T^2}{t^2}\Big(\frac{\lfloor\frac{n}{T}\rfloor^{k+1}-1}{\lfloor\frac{n}{T}\rfloor-1}-\lfloor\frac{n}{T}\rfloor-1\Big) \]
因為\(k\le 10^{10^5}\),所以用歐拉定理降冪取模即可。注意特判\(\lfloor \frac{n}{T}\rfloor=1\)的情況。
其中令\(g(T)=\sum_{t|T}\mu(t)\cdot \frac{T^2}{t^2},\Phi(n)=\sum_{T=1}^ng(T)\)。對於\(T\)小的部分可以通過線性篩求得:
1. 當\(T\)為素數時,\(g(T)=T^2-1\)。
2. 若\(T\)中無平方質因子時\(T=p_1\cdot p_2\dots p_k\),因為\(g(T)\)為積形函數,則有\(g(T)=g(p_1)\cdot g(p_2)\dots g(p_k)\)。
3. 若\(T\)中有平方質因子時,有\(g(T\cdot p)=g(T)\cdot p^2\)。
對於\(T\)大的部分,我們發現\(g(T)=\mu*id^2(T)\),則\(g*I(T)=\mu*I*id^2(T)=e*id^2(T)=id^2(T)=T^2\)。則有:
\[\sum_{T=1}^nT^2=\sum_{T=1}^n\sum_{d|T}g(d)=\sum_{T=1}^n\sum_{d|T}\sum_{t|d}\mu(t)\cdot \frac{d^2}{t^2}=\sum_{T=1}^n\sum_{d=1}^{\frac{n}{T}}\sum_{t|d}\mu(t)\cdot\frac{d^2}{t^2} \\=\sum_{T=1}^n\Phi(\frac{n}{T}),則\Phi(n)=\frac{n\cdot (n+1)\cdot (2\cdot n+1)}{6}-\sum_{T=2}^n\Phi(\frac{n}{T}) \]
放個51Nod1238代碼當模板用:
/*
* @Author: Simon
* @Date: 2019-05-03 12:35:17
* @Last Modified by: Simon
* @Last Modified time: 2019-05-03 17:29:21
*/
#include<bits/stdc++.h>
using namespace std;
typedef int Int;
#define int long long
#define INF 0x3f3f3f3f
#define maxn 5000005
#define Mod 3000005
const int mod=1e9+7;
int inv2,inv4,inv6;
struct HashMap{
int head[Mod],key[Mod],value[Mod],nxt[Mod],tol=0;
void clear(){
tol=0;memset(head,-1,sizeof(head));
}
HashMap(){
clear();
}
void insert(int k,int v){
int idx=k%Mod;
for(int i=head[idx];~i;i=nxt[i]){
if(key[i]==k){
value[i]=min(value[i],v);
return ;
}
}
key[tol]=k;value[tol]=v;nxt[tol]=head[idx];head[idx]=tol++;
}
int operator [](int k){
int idx=k%Mod;
for(int i=head[idx];~i;i=nxt[i]){
if(key[i]==k) return value[i];
}
return -1;
}
}mp;
Int prime[maxn],Phi[maxn],cnt=0,sum[maxn];
bool vis[maxn]={1,1};
void Euler(){
Phi[1]=1;
for(int i=2;i<maxn;i++){
if(!vis[i]){
prime[++cnt]=i;
Phi[i]=i-1;
}
for(int j=1;j<=cnt&&i*prime[j]<maxn;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0){
Phi[i*prime[j]]=Phi[i]*prime[j];
break;
}
Phi[i*prime[j]]=Phi[i]*(prime[j]-1);
}
}
for(int i=1;i<maxn;i++) sum[i]=(sum[i-1]+i%mod*i%mod*Phi[i])%mod;
}
int sum_1(int n){
n%=mod;
return n%mod*(n+1)%mod*inv2%mod;
}
int sum_2(int n){
n%=mod;
return n%mod*(n+1)%mod*(2*n+1)%mod*inv6%mod;
}
int sum_3(int n){
n%=mod;
return n%mod*n%mod*(n+1)%mod*(n+1)%mod*inv4%mod;
}
int dfs(int n){
if(n<maxn) return sum[n];
if(mp[n]!=-1) return mp[n];
int sum=0;
for(int i=2,j;i<=n;i=j+1){
j=n/(n/i);
(sum+=(sum_2(j)-sum_2(i-1)+mod)%mod*dfs(n/i)%mod)%=mod;
}
sum=(sum_3(n)-sum+mod)%mod;
mp.insert(n,sum);
return sum;
}
int solve(int n){
int sum=0;
for(int i=1,j;i<=n;i=j+1){
j=n/(n/i);
(sum+=(sum_1(j)-sum_1(i-1)+mod)%mod*dfs(n/i)%mod)%=mod;
}
return sum;
}
int fpow(int a,int b){
a%=mod;int ans=1;
while(b){
if(b&1) (ans*=a)%=mod;
(a*=a)%=mod;
b>>=1;
}
return ans;
}
Int main()
{
ios::sync_with_stdio(false);
cin.tie(0);Euler();
inv2=fpow(2,mod-2);inv4=fpow(4,mod-2);inv6=fpow(6,mod-2);
int n;scanf("%lld",&n);
printf("%lld\n",solve(n));
cin.get(),cin.get();
return 0;
}
莫比烏斯反演擴展
結尾補一個不常用的莫比烏斯反演非卷積形式的公式,對於數論函數\(f,g\)和完全積性函數\(t\)且\(t(1)=1\):
\[f(n)=\sum_{i=1}^nt(i)\cdot g\Big(\Big \lfloor \frac{n}{i}\Big \rfloor \Big)\\ \Leftrightarrow g(n)=\sum_{i=1}^n\mu(i)\cdot t(i)\cdot f\Big(\Big \lfloor \frac{n}{i}\Big \rfloor \Big)\\ \]
補充:特殊形式下的積性函數的線性篩原理
\[如何利用線性篩來O(n)求出函數f(x)=\sum_{p\in primes,p|x}\mu(\frac {x}{p})的前綴和\\令x的最小質因子為y,即x=i\cdot y\\ 1、x\in primes ,p只能等於x,則f(x)=\mu(\frac {x}{x})=\mu(1)=1\\ 2、i\%y=0,即x有多個最小質因子,f(x)=f(i\cdot y)=\sum_{p\in primes,p|(i\cdot y)}\mu(\frac {i\cdot y}{p}) \\當i沒有多個相同的質因子,當且僅當p=y時,\mu(\frac {i\cdot y}{p})不為0,故f(x)=u(i)。 \\當i也有多個相同的質因子,那么對於任意的p,都有\mu(\frac {i\cdot y}{p})=0,故f(x)=0 \\所以f(x)=\mu(i)+0=\mu(i) \\3、i\%y\neq 0,即x只有一個最小質因子:有f(i)=\sum_{p\in primes,p|i}\mu(\frac {i}{p}) \\f(x)=f(i\cdot y)=\sum_{p\in primes,p|(i\cdot y)}\mu(\frac {i\cdot y}{p})\\= \left\{\begin{matrix} \sum_{p\in primes,p|(i\cdot y)}\mu(\frac {i}{p})\cdot \mu(y)=\sum_{p\in primes,p|(i\cdot y)}-\mu(\frac {i}{p})=-f(i)&p\neq y\\ \sum_{p\in primes,p|(i\cdot y)}\mu(\frac {i\cdot y}{y})=\sum_{p\in primes,p|(i\cdot y)}\mu({i})=\mu(i)&p=y \end{matrix}\right.\\ 所以f(x)=-f(i)+\mu(i)\\ 綜上f(x)=\left\{\begin{matrix} 1&x \in primes\\ \mu(i)&y^2|x,即x有平方數因子\\ -f(i)+\mu(i)&y^2\not \mid x,即x無平方數因子 \end{matrix}\right.\\其中,y為n的最小質因數,並且n=i\cdot y \]