C. 最大公約數
求 \(\sum\limits_{i=1}^n\dfrac{n}{gcd(i,n)}\)。
先考慮用尤拉函式解決。考慮列舉 \(d=\gcd(i,n)\) 的取值。式子變成 \(\sum\limits_{d\mid n}\sum\limits_{i=1}^n[\gcd(i,n)=d]\cdot\dfrac{n}{d}\)。
對於 \(\gcd(a,b)=d\),有 \(\gcd(\frac{a}{d},\frac{b}{d})=1\)。
所以 \(\sum\limits_{d\mid n}\sum\limits_{i=1}^{\frac{n}{d}}[\gcd(i,\frac{n}{d})=1]\cdot\dfrac{n}{d}\)。
而明顯,在 \(\frac{n}{d}\) 中與它互質的數即為 \(\varphi(\frac{n}{d})\)。
\(\sum\limits_{d\mid n}\dfrac{n}{d}\cdot\varphi(\frac{n}{d})\)
\(=\sum\limits_{d\mid n}d\cdot\varphi(d)\)
設 \(f(n)=\sum\limits_{d\mid n}d\cdot\varphi(d)\),可以證明,\(f(n)\) 是積性函式。
證明:
\(\because\gcd(a,b)=1\)
\(\therefore\) \(ab\) 的因子一部分來自 \(a\),一部分來自 \(b\)。
\(f(ab)=\sum\limits_{d\mid ab}d\cdot\varphi(d)=\sum\limits_{d\mid a}\sum\limits_{d'\mid b}dd'\cdot\varphi(dd')\)
又 \(\because \varphi(dd')=\varphi(d)\varphi(d')\)
\(f(ab)=\sum\limits_{d\mid n}d\cdot\varphi(d)\sum\limits_{d'\mid n}d'\cdot\varphi(d')=f(a)f(b)\)
證畢。
直接線性篩計算積性函式即可。
關於如何計算,設 \(x=i\times pri_j\):
-
當 \(i\) 是質數時,\(f(i)=i\times(i-1)+1\);
-
當 \(pri_j\mid i\) 時,分兩種情況,\(i\) 不是最小質因數的冪次,\(f(x)=f(low_x)f(x/low_x)\),\(low_x\) 為 \(x\) 的最小質因數的最大冪次;\(i\) 是小質因數的冪次,一般有規律可以計算,因為因數易知,比如這裡就可以寫成 \(f(x)=f(i)+pri_j\cdot\varphi(pri_j)\)。
-
當 \(pri_j\nmid i\) 時,\(f(x)=f(i)f(pri_j)\)。
總結:此類題的思路就是先化簡式子,先看看能不能有尤拉函式做,再考慮莫反。最後證明此函式是積性函式,直接線性篩預處理做到 \(O(n)\) 多次詢問。