「學習筆記」數論函數
註:此博客寫於 2017.12
Warn:此博文有超過近10處錯誤,請結合上下文辨別
前置技能
定義
數論函數。 定義域為正整數的函數。以下默認所有數都是正整數。
積性函數。 對於所有 \(\gcd (a,b) = 1\) , \(f(ab) = f(a)f(b)\) 。一定會滿足 \(f(1) = 1\)。
完全積性函數。 對於 任意 的 \(a,b\), \(f(ab) = f(a)f(b)\) 。
在實際應用中,用到的大多都是 積性函數。
積性函數的性質
積性。 若 \(f,g\) 為積性函數, 那麽 \((fg)(n) = f(n)g(n), (\frac f g)(n) = \frac {f(n)} {g(n)}\)
用線性篩求 \([1,n]\) 的積性函數。 令 \(n = \prod p _ {i} ^ {k_ i}\) ,那麽 \(f(n) = \prod f(p _ {i} ^ {k_ i})\) 。
所以在線性篩的時候,有一種方法就是 計算所有 \(f(p_i) ^{k_i}\) 再相乘 。
另一種方法是,考慮增加一個最小質因子後的變化。
常見的積性函數及其性質
歐拉函數,積性。 \(\varphi(n) = \sum _ {i=1} ^n [\gcd(n,i)=1]\) 表示 \([1,n]\) 中與 \(n\) 互質的數的個數。
直接根據歐拉函數的定義就可以得到一些有用的式子。比如:(註意利用 \(\gcd(n,i) = \gcd(n,n-i)\)
\[\sum _ {i=1} ^ n i \cdot [\gcd(n,i)=1] = \frac 1 2 \times (n \cdot \sum _ {i=1} ^{n} [\gcd(n,i)=1] + [n=1]) = \frac {n \cdot \varphi(n) + [n=1]} 2 \tag 1\]
\[\sum _ {i=1} ^ n \sum _ {j=1} ^ n [\gcd (i, j) = 1] =2 \sum _ {i=1} ^n \varphi(i) - 1 \tag {2}\]
莫比烏斯函數,積性。 當 \(n\) 含有平方因子 \(\mu(n) = 0\)
除數函數,積性。 \(\sigma _ {k} (n)\) 表示 \(n\) 的所有因數的 \(k\) 次冪之和。
特別的,\(d(n) = \sigma _ {0} (n)\) ,表示 \(n\) 的因數個數。
\(\sigma _ {1} (n) = \sigma (n)\) ,表示 \(n\) 的所有因數之和。
這個角標在上在下都是等價的!
冪函數,完全積性。 \(id _ {k} (n)\) ,表示 \(n^k\) 。
特別的, \(id _ {0} (n) = 1 (n) = 1\) 。
單位函數,完全積性。 當且僅當 \(n=1\) 時, \(e(n)=1\) ,否則 \(e(n)=0\) 。
Dirichlet卷積
定義
兩個數論函數 \(f,g\) 的Dirichlet卷積。
\[\large (f \ast g)(n) = \sum _ {d|n} f(d) \times g(\frac n d) \tag{3}\]
性質
定義。 \((f+n)(n) = f(n) + g(n)\) .
交換律。 \(f \ast g = g \ast f\)
結合律。 \((f \ast g) * h = f \ast (g \ast h)\)
分配率。 \(f \ast (g + h) = f \ast g + f \ast h\)
單位元。 \(f \ast e = f\)
當 \(f,g\) 為積性函數時, \(f \ast g\) 也為積性函數。
如果有一個積性函數 \(f\) ,則一定存在 \(g*f=e\) , \(g\) 就是 \(f\) 的Dirichlet逆
,也是積性函數。
已知數論函數 \(f,g\) ,則可以枚舉倍數,在 \(O(n \log n)\) 的時間內計算出 \(f \ast g\) 。
常見的Dirichlet卷積
一個函數的約數和可以卷上1。
\[d(n) = \sum _ {d|n} 1 \Rightarrow d = 1 \ast 1 \tag{4}\]
\[\sigma (n) = \sum _ {d|n} d \Rightarrow \sigma = d \ast 1 \tag{5}\]
極其重要的,莫比烏斯反演的基礎
\[\large \sum _ {d|n} \mu(d) = \sum _ {i=0} ^{k} (-1) ^{i} \times \binom k i = (1-1) ^{k} = e(n) \Longrightarrow e = \mu * 1 \tag{6}\]
另一個常用的卷積。 因為 \(\varphi(d)\) 表示與 \(n\) 的最大公約數為 \(\frac n d\) 的數的個數,它們的和顯然為 \(n\) 。
\[\large \sum _ {d|n} \varphi (d) = n \Longrightarrow \varphi \ast 1 = id \tag{7}\]
莫比烏斯反演
形式一:因數反演
如果兩個數論函數 \(f,g\) 滿足 \(f = g \ast 1\) ,也即
\[\large f(n) = \sum _ {d|n} g(d) \tag{8}\]
那麽它們滿足 \(g = \mu * f\) ,也即
\[\large g(n) = \sum _ {d|n} \mu (d) \times f(\frac n d) \tag {9}\]
考慮證明 \(f = g \ast 1 \Leftrightarrow g = \mu \ast f\)
已知
\[\large f = g \ast 1\]
兩邊都卷上 \(\mu\) ,可得
\[\large f \ast \mu = g \ast \mu \ast 1 = g \ast e = g\]
已知
\[\large f \ast \mu = g\]
兩邊都卷上 \(1\) ,可得
\[\large g \ast 1 = f \ast \mu \ast 1 = f \ast e = f\]
本質? \(1\) 與 \(\mu\) 在 Dirichlet卷積意義下互為逆元。
形式二:倍數反演
這就不是Dirichlet卷積了,不過也是對的。
\[\large g(n) = \sum _ {n|d} f(d) \Longrightarrow f(n) \sum _ {n|d} \mu( \frac d n) g(d) \tag {10}\]
變換技巧
一些基本套路,多推推就熟練了。
1.枚舉 \(\gcd\) 取值
2.交換枚舉倍數與約數
3.用莫比烏斯函數求和替換
4.改寫求和指標
5.得到一個整除分塊的形式,處理一個函數的前綴和
最重要的還是保持恒等,利用 兩種貢獻 的思想。
一
有一個 積性函數 \(f\),它與恒等函數 \(1\) 的Dirichlet卷積 \(g = f*1\) 如何計算?
假設 \(n = \prod _ {i=1} ^{t} p _ {i} ^{ki}\) ,\(g(n) = \sum _ {d|n} f(n)\) 。那麽就有
\[\large g(n) = \prod _ {i=1} ^{t} \sum _ {j=0} ^{ki} f(p _ {i} ^{j}) \tag{11}\]
二
整數分塊技巧。 求 \(\sum _ {i=1} ^{n} f(i) \times \lfloor \frac n i \rfloor\)
註意到 \(\large \lfloor \frac n i \rfloor\) 只有 \(O(\sqrt n)\) 種取值。對於固定的 \(\lfloor \frac n i \rfloor\) , \(i\) 的取值為
\[\large \left[ \left \lfloor \frac n {\lfloor \frac n i \rfloor+1} \right \rfloor+1, \left \lfloor \frac n {\lfloor \frac n i \rfloor} \right \rfloor \right] \tag{12}\]
對於相同的 \(\lfloor \frac n i \rfloor\) ,我們只需要計算 \(f(i)\) 的前綴和 即可。復雜度即是 \(O(\sqrt n)\)。
同時有 \(n,m\) 時同理。
三
假設 \(a \ast b\) 已經是Dirichlet卷積,那麽
\[\large id _ {k} \times (a \ast b) = (id _ {k} \times a) \ast (id _ {k} \times b) \tag{13}\]
再根據常用卷積 \(id = \varphi \ast 1\) ,發現 \(\varphi\) 是連接兩個相鄰 \(id\) 的橋梁,即
\[\large (\varphi \times id _ {k}) \ast id _ {k} = id _ {k+1} \tag{14}\]
四
可以由兩個常用卷積推出,
\[\large \varphi (n) = \sum _ {d|n} \mu (d) \times \frac n d \Longrightarrow \varphi = \mu \ast id \tag{15}\]
五
常見變換方式:約數與倍數的互換。
對於 \(d,e,D=d \times e\) 三項貢獻的這種,可以枚舉 \(D\) 將其化為狄利克雷卷積,也可以枚舉 \(d\)和 \(e\) 化成帶下取整的式子;一般來講前者往往易於預處理,可以應付多組詢問,後者則在單次詢問中有優秀表現。
六
最最最容易碰到的莫比烏斯套路。以後就直接作為結論 了:
現在有一個奇怪的函數 \(f(n)\) ,不妨設 \(n \leq m\) ,那麽,
\[\large { \sum _ {i=1} ^ n \sum _ {j=1} ^ m f(\gcd(i,j)) \\ = \sum _ {d=1} ^ n f(d) \sum _ {i=1} ^ {\lfloor \frac n d \rfloor} \sum _ {j=1} ^ {\lfloor \frac m d \rfloor } [\gcd(i,j)=1] \\ = \sum _ {d=1} ^ n f(d) \sum _ {i=1} ^ {\lfloor \frac n d \rfloor} \sum _ {j=1} ^ {\lfloor \frac m d \rfloor } \sum _ {p|i,p|j} \mu(p) \\ = \sum _ {d=1} ^ n f(d) \sum _ {p=1} ^ {\lfloor \frac n d \rfloor} \mu(p) \cdot \lfloor \frac n {pd} \rfloor \cdot \lfloor \frac m {pd} \rfloor \\ = \sum _ {D=1} ^ n \sum _ {d|D} f(d) \cdot \mu(\frac D d) \cdot \lfloor \frac n D \rfloor \cdot \lfloor \frac m D \rfloor \tag{16}}\]
就變成要求 \(f \ast \mu\) 的前綴和了,再套用分塊即可。
杜教篩
問題的一般形式
給出一個奇怪的數論函數 \(f(x)\) (simple一點像 \(\mu, \varphi\) )。接著給出了一個 \(n\) ,一般有 \(10^{10}\) 的範圍。需要求 \(S(n) = \sum _ {i=1} ^{n} f(i)\) 模一個大數的值。
構造
求出 \(S(n)\) 會非常困難,考慮找出另一個函數 \(g(x)\) ,考慮 \((f*g)(x)\) 的前綴和。
\[\large \sum _ {i=1} ^{n} \sum _ {j|i} f(i) g(\frac i j) = \sum _ {ij \leq n} f(i) g(j) = \sum _ {i=1} ^{n} g(i) S(\lfloor \frac n i \rfloor) \]
於是,
\[\large g(1)S(n) = \sum _ {i=1} ^{n} (f*g)(i) - \sum _ {i=2} ^{n} g(i) S(\lfloor \frac n i \rfloor)\]
要求&&時間復雜度&&Trick
需要保證 \((f*g)(x),g(x)\) 的前綴和都比較容易計算。
可以直接記憶化搜索,復雜度 \(O(n^{\frac 3 4})\) 。
可以預處理前 \(k\) 個前綴和,復雜度 \(O(k + \frac n {\sqrt k})\) 。取 \(k=n^{\frac 2 3}\) 最優,復雜度 \(O(n ^ {\frac 2 3})\) 。
對於 \(\mu(x),\varphi(x)\) 的前綴和,我們令 \(g(x) = 1\) 即可。
特別重要的!
一個性質: \(\large \left \lfloor \frac n {ab} \right \rfloor = \left \lfloor \frac {\left \lfloor \frac n a \right \rfloor} b \right \rfloor\)
因為 \(\frac n {n ^ {\frac 2 3}} \leq n ^ {\frac 1 3}\) ,根據上述性質,杜教篩在篩的過程中,會被計算的 \(s(x)\) 只有 \(O(n ^ {\frac 1 3})\) 個。
這個東西用於時間復雜度計算很有用!所以像分塊套杜教篩啊,杜教篩套分塊啊,復雜度都是對的!(只要都是不斷整除 \(n\))
還有一個 Trick
,我們不是要 HASH
嗎,但是那個太慢了。
\(S(x)\) 直接存到 \(f[n/x]\) 裏就好了( \(n\) 是全局的)
復雜的基本形式
%%%jiry_2
有時候, \(f(x)\) 本身就是兩個函數的積/Dirichlet卷積,通常令 \(g(x) = 1\) ,可以進一步化簡。
推柿子啦啦啦
來看一些有意思的題目。順便.....
BZOJ3560 DZY Loves Math V 求 \(\sum _ {i_1|a_1} \sum _ {i_2|a_2} ... \sum _ {i_n|a_n}\) 。
歐拉函數的性質。 考慮統計每一個質因子出現的次數,再相乘即可。註意 \(p^0=1\) 要特殊考慮。
空間開不下?註意到一個 \(ai\) 最多只會存在一個 \(p > \sqrt {a_{max}}\) 。
51Nod1675 序列變換 給定序列 \(a,b\) ,求存在多少對 \(x,y\) 滿足 \(\gcd(x,y)=1,a_{b_x}=b_{a_x}\)。
莫比烏斯反演的第二形式。 定義 \(f(k)\) 為 \(gcd(x,y)=k\) 的個數,定義 \(F(k)\) 為 \(k|\gcd(x,y)\) 的個數。顯然 \(F(k)\) 很容易求,於是用 \((10)\) 就好了。
BZOJ3561 DZY Loves Math VI 求 \(\sum _ {i=1} ^ n \sum _ {j=1} ^ m lcm (i,j) ^ {\gcd(i, j)}\) 。
莫比烏斯反演,暴力。 雖然不是 \((16)\) 的形式,也可以用類似的套路,反演得到:
\[\sum _ {d = 1} ^ {n} d ^ d \cdot \sum _ {p = 1} ^ {\lfloor \frac n d \rfloor} \mu(p) \cdot p ^ {2d} \cdot \sum _ {i=1} ^ {\lfloor \frac m {pd} \rfloor} i ^ d \cdot \sum _ {j=1} ^ {\lfloor \frac n {pd} \rfloor } j ^ d\]
這個東西直接暴力嘛。。
BZOJ4816 [SDOI2017]數字表格 求 \(\prod _ {i=1} ^ n \prod _ {j=1} ^ m fib(gcd(i,j))\) ,其中 \(fib(n)\) 是斐波那契數。
莫比烏斯反演,前綴積。 同樣也是 \((16)\) 的套路,只不過到了指數上面。同時前綴和變成了前綴積,同樣也是 \(O(n \log n)\) 暴力預處理。
BZOJ3529 [SDOI2014]數表 求 \(\sum _ {i=1} ^ n \sum _ {j=1} ^ m \sigma _ 1(\gcd(i,j)) \cdot [\sigma_1(\gcd(i,j)) \leq a]\) 。多組詢問。
莫比烏斯反演,離線。 哈哈哈,又是 \((16)\) 的套路。。於是就是要求:
\[\large \sum _ {d|D} \sigma_1 (d) \cdot \mu(\frac D d)\]
的前綴和。
然後這個 \(a\) 的限制似乎有些難搞?註意到有多組數據,所以可以離線,按照 \(a\) 排序。修改和求前綴和就交給樹狀數組了。
復雜度? \(O(n \log ^2 n + T \cdot \sqrt n \cdot \log n)\)。
BZOJ4407 於神之怒加強版 求 \(\sum _ {i=1} ^ n \sum _ {j=1} ^ m \gcd(i,j) ^ k\) 。
莫比烏斯反演,積性函數前綴和。 又是 \((16)\) 的套路(這句話說了多少遍了)。就是要求:
\[\sum _ {d|D} d ^ k \cdot \mu (\frac D d)\]
的前綴和。
然後這個是積性函數的狄利克雷卷積,可以線性篩。往往就需要利用 \(\mu\) ,可以直接分情況。或者推公式,展開 \(g(D)\) (這個方法比較萬能):
\[\large {g(n) \\ = \sum _ {d|n} d ^ k \mu(\frac n d) \\ = \prod _ {p_i} g(p_i ^{x_i}) \\ = \prod _{p_i} (p_i ^{kx_i} \cdot \mu(1) + p_i ^{k(x_i-1)} \cdot \mu(p_i)) \\ = \prod _ {p_i} p_i ^ {k(x_i-1)} \cdot (p_i ^k -1)}\]
BZOJ3994 [SDOI2015]約數個數和 求 \(\sum _{i=1} ^n \sum _{j=1} ^m \sigma_0(i,j)\) 。
莫比烏斯反演,\(\sigma_0\) 的性質。 這題需要利用 \(\sigma_0\) 的性質:
\[\large \sigma_0 (n,m) = \sum _ {i|n} \sum _ {j|m} [\gcd(i,j)=1]\]
證明:考慮一個質因子 \(p\) ,假設 \(n\) 中有 \(x\) 個,\(m\) 中有 \(y\) 個。那麽根據約數個數定理,\(\sigma_0(n,m) = \prod (x+y-1)\)。而如果要使 \(\gcd(i,j)=1\) ,每個質因子同樣有 \(x+y-1\) 種取法(\(x\) 或 \(y\) 為 \(0\) )。恰好是約數定理的形式。
接下來就是套路變換啦。
BZOJ3309 DZY Loves Math 對於正整數 \(n\),定義 \(f(n)\) 為 \(n\) 所含質因子的最大冪指數。例如 \(f(1960)=f(2^3 \times 5^1 \times 7^2)=3, f(10007)=1, f(1)=0\) 。給定正整數 \(a,b\) ,求 \(\sum _ {i=1} ^a \sum _ {j=1} ^m f( \gcd(i,j))\) 。
莫比烏斯反演,特殊性質函數的前綴和。 根據 \((16)\) ,我們只需要求 \(g(D) = \sum _ {d|D} f(d) \mu ( \frac D d )\) 的前綴和即可。
但是,發現這個 \(f(d)\) 不是積性函數,似乎就無法線性篩了。於是就要利用 \(\mu(n)\) 的特殊性質。
將 \(D\) 表示為質因數乘積的形式,如果 \(\frac D d\) 對 \(g(D)\) 有貢獻,每個質因子的次數不會超過 \(1\) 。 如果一個質因子 \(p\) 在 \(\frac D d\) 中,我們稱選擇 \(p\) 。
引理:對於一個包含 \(n\ (1 \leq n)\) 個元素的集合,選擇奇數個元素的方案數的等於選擇偶數個元素的方案數。
歸納法很容易證明。
我們知道,\(\mu(D) = (-1) ^ k\) ,其中 \(k\) 是選擇的個數。
接下來分三種情況:(設所有質因子中,最大的次數為 \(a\) )
\(D = p^a\) , \(g(p^a) = f(p^a) - f(p^{a-1}) = a - (a - 1) = 1\) 。
\(D = p_1 ^{a_1} p_2 ^{a_2} ... p_m^{a_m}\) ,且 不 滿足 \(a_1 = a_2 = ... = a_m\),假設最大次數 \(a\) 有 \(b\) 個。考慮 \(a-1\) 的貢獻,此時最大次數的質因子都被選擇,剩下的 \(1 \leq m-b\) 個數可以任意選擇,根據引理,正負全都被抵消了。考慮 \(a\) 的貢獻,由於 所有數中選擇奇數與偶數個的方案,\(a-1\) 時選擇奇數與偶數個數的方案都相等 ,同樣會正負都抵消。此時 \(g(D) = 0\) 。
\(D = p_1 ^{a_1} p_2 ^{a_2} ... p_m^{a_m}\) ,且有 \(a_1 = a_2 = ... = a_m = a\)。如果全部選擇, \(f(d) = a-1\) ,對 \(g(D)\) 的貢獻為 \((a-1) \times (-1)^m\) ;而其他情況下, \(f(d)=a\),對 \(g(D)\) 的貢獻為 \(a \times (-1) ^ {m-1}\) 。此時 \(g(D) = -(-1)^m\) 。
為什麽第三種情況套單獨考慮? 因為此時 \(m-b=0\) ,不滿足引理的條件,需要單獨考慮。
同時也可以發現, 第一種情況沒必要特殊考慮,同第三種情況。
最後,這個東西也是可以線性篩的。 利用 每個數只會被最小的質因子篩 用 \(a[]\) 記錄每一個數最小質因子的次數,\(b[]\) 記錄最小質因子的 \(a[]\) 次,就可以遞推了。
BZOJ3512 DZY Loves Math IV 求 \(\sum _ {i = 1} ^ n \sum _ {j = 1} ^ m \varphi (ij)\) ,\(n \leq 10^5, m \leq 10^9\)
歐拉函數的性質,莫比烏斯反演,杜教篩。 大爺的姿勢。
令 \(S(n,m) = \sum _ {i=1} ^ m \varphi (ni)\) 。
\[\large { S(n,m) \\ = \sum _ {i=1} ^ m \varphi (ni) \\ = \sum _ {i=1} ^ m \varphi ( \frac n {\gcd(i,n)}) \cdot \varphi(i) \cdot \gcd(i,n) \\ = \sum _ {i=1} ^ m \varphi(\frac n {\gcd(i,n)}) \cdot \varphi(i) \cdot \sum _ {d|i,d|n} \varphi(d) \\ = \sum _ {i=1} ^ m \varphi(i) \cdot \sum _ {d|i,d|n} \varphi(\frac n d) \\ = \sum _ {d|n} \varphi(\frac n d ) \cdot \sum _ {i=1} ^ {\lfloor \frac m d \rfloor } \varphi(di) \\ = \sum _ {d | n} \varphi(\frac n d) \cdot S(d, \lfloor \frac m d \rfloor )}\]
第二步,由於 \(n,i\) 不一定互質,所以單獨提出了 \(\gcd\) ;第三步,巧妙地運用了 \((7)\) ;第四步,由於 \(\frac n {\gcd(i,n)},d\) 互質,所以可以直接合並;第五步應該及其套路。
當 \(n=1\) 時,需要大力杜教篩搞一搞。
嘛..
這個復雜度不會爆炸?
註意到,需要計算的 \(S(n‘,m‘)\) ,一定滿足 \(m‘ = \lfloor \frac m {n‘} \rfloor\)(除了第一個),所以要計算的就很少啦。復雜度差不多是 \(O((n ^ {\frac 2 3} + m ^ {\frac 3 2}) \times HASH)\) ?
還要HASH
一下,同時,根據 \(\varphi\) 的性質,可以先把 \(n\) 中額外的質因子搞出來。
UPD 註意,第四步的推導是錯誤的,必須要滿足 \(|\mu(n)|=1\) ,這樣才能保證互質(因為每個質因子都只有一個,只能存在於 \(\frac n {\gcd(i,n)}\) 或者 \(\gcd(i,n)\) )。所以搞出額外的質因子是必須的。
51Nod1238 最小公倍數之和 \(\sum _ {i=1} ^{n} \sum _ {j=1} ^{n} lcm(i,j)\)
只是杜教篩。
兩維的嘛..要先拆開來啦..
\[\large {f(n) \\ = \sum _ {i=1} ^{n} lcm(n,i)\\ = n \times \sum _ {i=1} ^{n} \frac i {\gcd (i, n)}\\ = n \times \sum _ {d|n} ^{n} \sum _ {id \leq n} i \times e(\gcd (i, \frac n d))\\ = n \times \sum _ {d|n} ^{n} \frac 1 2 \times (e(d) + d \times \varphi(d))\\ = \frac n 2 + \frac 1 2 \times n \times \sum _ {d|n} d \times \varphi(d)\\ }\]
最主要是搞出 \(S(n) = \sum _ {i=1} ^n i \times \sum _ {d|i} d \times \varphi(d)\) 也就是 \(id \times [(id \times \varphi) \ast 1] = (id _ 2 \times \varphi) \ast id\) 的前綴和。考慮如何消去難以計算的 \(\varphi\) 。
我們需要卷上一個新的東西。考慮利用 \((7)\) 來消去。考慮卷上 \(id _ 2\) 來提出括號中的 \(id _ 2\) ,於是
\[\large id _ 2 \ast (id _ 2 \times \varphi) \ast id = id _ 2 \times (1 * \varphi) \ast id = id _ 3 \ast id\]
這個前綴和就比較好求辣。令 \(h(i)\) 表示這個柿子的前綴和,於是(考慮展開後每個 \(d\) 的貢獻次數)
\[\large h(n) = \sum _ {d=1} ^{n} d \sum _ {id \leq n} i ^ 3\]
註意到不同 \(i\) 的上限只有 \(O(\sqrt n)\) 個,所以這個前綴和也可以分塊!\(g(x) = id _ 2\) 的前綴和也很容易計算。由於把 \(S\) 劃分為 \(O(\sqrt n)\) 個子問題時也需要 \(O(\sqrt n)\) 的時間復雜度,所以總的復雜度不變。仍然為 \(O(n ^ {\frac 2 3})\) 。
發現很神奇的, \(ANS = s(n)\) 。
另一種方法。 得到 \(S(n) = \sum _ {i=1} ^n i \times \sum _ {d|i} d \times \varphi(d)\) 後,可以改變形式使得更容易篩。改為枚舉 \(i\) 是 \(d\) 的多少倍。
\[\large {S(n) = \sum _ {i=1} ^n i \times \sum _ {d|i} d \times \varphi(d) \\ = \sum _ {i=1} ^ n i \times \sum _ {d=1} ^ {\lfloor \frac n d \rfloor} d ^ 2 \times \varphi (d)}\]
嗯,那麽要求的就是 \(id _ 2 \times \varphi\) 的前綴和,再分塊。卷上 \(id_ 2\) 。要求 \(id_ 3\) 的前綴和。
題外話。 51Nod1227
也是同樣的方法,只是一開始得到的為 \((\varphi \times id) \ast 1\) 。51Nod1237
大致方向差不多,只是推的過程簡單很多。
如果用方法二,卷起來得到了 \(id _ 2\) ,十分容易計算!
如果直接卷 \(id\) 得到 \(1 \ast id _ 2\) ,也可以應用方法一,裏面套一層分塊。
似乎兩種方法本質一樣,都需要進行一次約數/倍數變換。分塊在外面或者裏面。
「學習筆記」數論函數