我需要计算1< = k< = N的phi(k)之和,其中N = 1,000,000且phi(k)是Euler的函数。这是一个项目欧拉问题。我已经使用之前的StackOverflow question解决了它,它要求计算phi(k)的每个值为1< k< N.但是,我想知道是否可以进一步优化,因为我们只需要phi(k)的最终总和而不是每个加数的单个值。
答案 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 )。
这可能会更快一些。