计算ph <(k)之和为1 <= k <= N?

时间:2015-06-10 02:27:29

标签: algorithm

我需要计算1&lt; = k&lt; = N的phi(k)之和,其中N = 1,000,000且phi(k)是Euler的函数。这是一个项目欧拉问题。我已经使用之前的StackOverflow question解决了它,它要求计算phi(k)的每个值为1&lt; k&lt; N.但是,我想知道是否可以进一步优化,因为我们只需要phi(k)的最终总和而不是每个加数的单个值。

1 个答案:

答案 0 :(得分:4)

Wikipedia page on Euler's totient function包括一个公式,由于Arnold Wafisz得到k从1到n的φ(k)之和:

sum(1<=k<=n) φ(k) = (1 + sum(1<=k<=n) μ(k)*(floor(n/k))^2) / 2

(在维基百科上阅读起来容易得多。)

如果 k 具有任何平方素因子,则Möbius functionμ( k )为0,否则(-1) f 其中 f k 中唯一素因子的数量。 (换句话说,如果 k 的素数因子化具有偶数个唯一素数,则为1;如果它具有奇数,则为-1;如果某个素数出现多次,则为0。)应该能够使用修改过的筛子快速计算μ( k )。

这可能会更快一些。