Solution - P2303 [SDOI2012] Longge 的问题

P2303 [SDOI2012] Longge 的问题

idea:

推式子。

解决方案:

直接开推:

i=1ngcd(i,n)=dnddin[gcd(i,n)=d]=dndi=1nd[gcd(i,nd)=1]=dndφ(nd)\sum_{i=1}^n\gcd(i,n) = \sum_{d\mid n}d\sum_{d\mid i}^n [\gcd(i,n)=d] = \sum_{d\mid n}d\sum_{i=1}^{\frac{n}{d}} [\gcd(i,\frac{n}{d})=1] = \sum_{d\mid n}d\cdot\varphi(\frac{n}{d})

这个式子已经可以用了:我们求出 nn 的所有质因子,然后 DfsDfs 枚举 nn 的因子即可。时间复杂度 O(n+k)O(\sqrt n + k)kknn 的因子数。由于 O(k)=O(n)O(k) = O(\sqrt n) ,时间复杂度是 O(n)O(\sqrt n) 的。

然而我们可以再进一步优化(参考题解)

dndφ(nd)=dnndφ(d)=dnnddpd,pPp1p=ndnpd,pPp1p\sum_{d\mid n}d\cdot\varphi(\frac{n}{d}) = \sum_{d\mid n}\frac{n}{d}\cdot\varphi(d) = \sum_{d\mid n}\frac{n}{d}\cdot d\prod_{p\mid d,p\in\mathbb{P}} \frac{p-1}{p} = n\cdot\sum_{d\mid n}\prod_{p\mid d,p\in\mathbb{P}} \frac{p-1}{p}

nndd 分解:

n=i=1kpiai                     n = \prod_{i=1}^k p_i^{a_i}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \

d=i=1kpibi(bi[0,ai])d = \prod_{i=1}^k p_i^{b_i}(b_i\in[0,a_i])

那么 dd 的答案是:

resd=i=1kpi1pi[bi0]res_d = \prod_{i=1}^k \frac{p_i-1}{p_i}[b_i\neq 0]

那么可以发现,与 dd 答案相同的其他数只需要包含相同的质因数即可,和个数无关。不妨设 ddgg 个不同的质因子,第 ii 个质因子为 qiq_i 。对于和 dd 一类的数答案的和为:

ansd=(i=1gqi1qi)(i=1gapos(i))=i=1gqi1qiapos(i)ans_d = (\prod_{i=1}^g \frac{q_i-1}{q_i})(\prod_{i=1}^g a_{pos(i)}) = \prod_{i=1}^g \frac{q_i-1}{q_i}\cdot a_{pos(i)}

对于 nn 的每个质因子,都可以有选和不选两种原则。故答案为:

(p11p1a1)0/1(p21p2a2)0/1...(pk1pkak)0/1\sum (\frac{p_1-1}{p_1}\cdot a_1)^{0/1}\cdot (\frac{p_2-1}{p_2}\cdot a_2)^{0/1}...(\frac{p_k-1}{p_k}\cdot a_k)^{0/1}

只能意会。。。相当于 Σ\Sigma 里面有 2n2^n 项。然后我们可以因式分解,答案为:

i=1k(pi1piai+1)\prod_{i=1}^k (\frac{p_i-1}{p_i}\cdot a_i +1)

其实很好理解,每个质因子都可以选和不选,选的话是前面一坨,不选是 11 ,乘开来刚好是 2n2^n 项。

用这个式子可以做到时间上 O(n)O(\sqrt n) 的复杂度,空间上 O(1)O(1)