【问题标题】:Calculating the sum of phi(k) for 1 <= k <= N?计算 1 <= k <= N 的 phi(k) 之和?
【发布时间】:2015-06-10 02:27:28
【问题描述】:

我需要计算 1 StackOverflow question 解决了它,它要求计算 phi(k) 的每个值,因为 1

【问题讨论】:

  • 您应该在Other formulae involving phi 上查看欧拉模型的属性。例如,偶数/奇数属性看起来可以帮助重用 phi(k) 来计算 phi(2*k)。
  • 我在math.stackexchange 上回答了如何在 O(n^(2/3)) 和更通用的变体中计算这个。

标签: algorithm


【解决方案1】:

Wikipedia page on Euler's totient function 包含一个由 Arnold Wafisz 提供的公式,用于计算从 1 到 n 的 k 的 φ(k) 之和:

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

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

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

结果可能会快一些。

【讨论】:

  • 我认为这个公式是一个非常好的方法。我相信您可以使用欧拉项目问题 73 的解决方案 pdf 中描述的方法在次线性时间 O(n^0.75) 内评估此公式。
猜你喜欢
  • 2010-11-04
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多