题目大意
即求
$$ \sum_{i=1}^n \gcd(i,n) $$
分析
联想到
$$ \varphi(n) = \sum_{i=1}^n [\gcd(i,n) = 1] $$
尝试凑这个形式
$$ \begin{aligned} \sum_{i=1}^n \gcd(i,n) &= \sum_{d \mid n} d \sum_{i=1}^n [\gcd(i,n) = d] \\ &= \sum_{d \mid n} d \sum_{i=1}^{n/d} [\gcd(i,n/d) = 1] \\ &= \sum_{d \mid n} d \varphi(n/d) \end{aligned} $$
这里其实已经可以过题了,但还可以再瞎搞一下,令
$$ nf(n) = \sum_{d \mid n} d \varphi(n/d) = n\sum_{d \mid n} \frac{\varphi(d)}{d} $$
尝试证明 $f(n)$ 是一个积性函数。设 $\gcd(a,b) = 1$,有
$$ \begin{aligned} f(a)f(b) &= \left(\sum_{d_1 \mid a} \frac{\varphi(d_1)}{d_1}\right) \left(\sum_{d_2 \mid b} \frac{\varphi(d_2)}{d_2}\right)\\ &= \sum_{d_1 \mid a} \sum_{d_2 \mid b} \frac{\varphi(d_1)}{d_1} \frac{\varphi(d_2)}{d_2}\\ &= \sum_{d_1 \mid a} \sum_{d_2 \mid b} \frac{\varphi(d_1d_2)}{d_1d_2}\\ &= f(ab) \end{aligned} $$
再来推一下素数,注意 $1 \mid p^k$,有
$$ f(p^k) = \sum_{d \mid p^k} \frac{\varphi(d)}{d} = \sum_{i=0}^k \frac{\varphi(p^i)}{p^i} = k\left(1 - \frac{1}{p}\right) + 1 $$
类似于 $\varphi(m)$ 唯一分解形式,我们还有
$$ f(n) = \prod_{i=1}^sf(p_i^{k_i}) = \prod_{i=1}^s \frac{k_ip_i - k_i + p_i}{p_i} $$
于是答案即为 $nf(n)$,复杂度 $O(\sqrt{n})$。
int main() {
ll n = rr(), ans = n;
for (ll i = 2; i * i <= n; i++) {
ll k = 0;
while (n % i == 0)
k++, n /= i;
if (k > 0)
ans += ans / i * k * (i - 1);
}
if (n > 1)
ans += ans / n * (n - 1);
printf("%lld", ans);
return 0;
}