P2303 [SDOI2012] Longge
一道看似非常基础的数论题,但是蕴含了非常多的知识,求解
∑
i
=
1
n
g
c
d
(
i
,
n
)
\sum_{i=1}^ngcd(i,n)
i=1∑ngcd(i,n)
这个东西我们轻松地就能化简成
i
d
∗
φ
id*\varphi
id∗φ的形式,然后考虑如何快速求解,那么可以枚举n的所有因数然后对因数
O
(
n
)
O(\sqrt{n})
O(n)求解
φ
(
n
)
\varphi(n)
φ(n)然后考虑这样子的复杂度和因数个数有关,那么有这样一个表告诉我们因数个数是很少的,所以这道题的复杂度是正确的。
然后进一步优化复杂度的思路就是将
φ
\varphi
φ展开
∑
d
∣
n
φ
(
d
)
n
d
=
∑
d
∣
n
d
(
∏
x
∣
d
x
−
1
x
)
n
d
=
n
∏
(
1
+
p
i
a
i
−
1
a
i
)
=
n
∏
p
i
a
i
−
p
i
+
a
i
a
i
\sum_{d|n}\varphi(d)\frac{n}{d}=\sum_{d|n}d(\prod_{x|d}\frac{x-1}{x})\frac{n}{d} \\=n\prod(1+p_i\frac{a_i-1}{a_i}) \\=n\prod\frac{p_ia_i-p_i+a_i}{a_i}
d∣n∑φ(d)dn=d∣n∑d(x∣d∏xx−1)dn=n∏(1+piaiai−1)=n∏aipiai−pi+ai
这样我们就可以
O
(
n
)
O(\sqrt{n})
O(n)解决这个问题了