Descrption
给定一个正整数 $n\ (0 < n \leq 2^{32})$,求 $\sum\limits_{i=1}^{n}\gcd(i,n)$ 。
Source
Solution
前置知识:
假设 $\gcd(i,n) = d\ (1 \leq i \leq n) $,则 $\gcd(\frac{i}{d},\frac{n}{d}) = 1$ 。
因为 $d \mid n$,所以 $d$ 一定是 $n$ 的因数。对于某一个 $d$,我们设 $i = d \times x\ (\frac{1}{d} \leq x \leq \frac{n}{d})$,则
有多少个符合条件的 $x$ 与 $\frac{n}{d}$ 互质呢?显然有 $\varphi(\frac{n}{d})$ 个。而 $d$ 是一个定值,所以也同样有 $\varphi(\frac{n}{d})$ 个 $i$ 满足 $\gcd(i,n) = d$,这个 $d$ 所产生的贡献即为 $\varphi(\frac{n}{d}) \times d$ 。枚举每一个因数 $d$,把它们的贡献加起来就能得到答案,即
枚举因数 $d$,只需要 $O(\sqrt n)$ 的时间复杂度。$n$ 最大为 $2^{32}$,肯定不能 $O(n)$ 预处理出 $\varphi(1) \sim \varphi(n)$,所以可以用 $O(\sqrt n)$ 的时间复杂度求出一个数的欧拉函数值。总时间复杂度为 $O(n\ 的因数个数 \times \sqrt n)$
Code
1 |
|