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