C. 最大公約數

Fire_Raku發表於2024-05-02

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\)

  1. \(i\) 是質數時,\(f(i)=i\times(i-1)+1\)

  2. \(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)\)

  3. \(pri_j\nmid i\) 時,\(f(x)=f(i)f(pri_j)\)

總結:此類題的思路就是先化簡式子,先看看能不能有尤拉函式做,再考慮莫反。最後證明此函式是積性函式,直接線性篩預處理做到 \(O(n)\) 多次詢問。

相關文章