【问题标题】:Tips for Project Euler Problem #78欧拉计划问题 #78 的提示
【发布时间】:2009-11-19 18:12:19
【问题描述】:

这是有问题的问题:Problem #78

这快把我逼疯了。我已经为此工作了几个小时,并且我已经能够降低找到将n 硬币堆叠到O(n/2) 的方法数量的复杂性,但即使有了这些改进和 em> 从p(n) 接近一百万的n 开始,我仍然无法在一分钟内得到答案。实际上一点也不。

有什么提示可以帮助我解决这个问题吗?

请记住,我不想要完整的解决方案,也不应该在此处发布任何功能解决方案,以免破坏其他人的问题。这也是我没有包含任何代码的原因。

【问题讨论】:

  • 您想在一分钟内解决什么特殊原因?
  • 这是 Project Euler 的经验法则。坦率地说:如果算法不能在一分钟内解决它,那就糟透了,因此不是一个好的解决方案。我想要一个好的解决方案。
  • 我不能给你任何具体的建议,但我前段时间发布了一些一般性的建议:stackoverflow.com/questions/1537306/…

标签: algorithm language-agnostic


【解决方案1】:

Wikipedia 可以在这里为您提供帮助。我假设您已经拥有的解决方案是递归,例如“中间函数”部分中的递归。这可用于求解欧拉问题,但速度不快。

更好的方法是在下一节中使用基于pentagonal number theorem 的递归。这个定理的证明不是直截了当的,所以我认为问题的作者并不希望你自己提出这个定理。相反,这是他们期望进行一些文献搜索的问题之一。

【讨论】:

    【解决方案2】:

    这个问题实际上是要求找到整数分区序列中可以被 1,000,000 整除的第一项。

    整数 n 的分区是描述正整数之和 ≤ n 的总和可以加在一起等于 n 的一种方式,而不管顺序如何。函数 p(n) 用于表示 n 的分区数。下面我们展示我们的 5 个“硬币”作为加数来评估 7 个分区,即 p(5)=7。

    5 = 5 = 4+1 = 3+2 = 3+1+1 = 2+2+1 = 2+1+1+1 = 1+1+1+1+1

    我们使用生成函数来创建序列,直到找到所需的 n。 生成函数最多需要 500 个所谓的广义五边形数,由 n(3n – 1)/2 给出,其中 0、±1、±2、±3……,其中前几个是 0、1、2、5 , 7, 12, 15, 22, 26, 35, ...(斯隆的 A001318)。

    我们有以下生成函数,它使用我们的五边形数作为指数:

    1 - q - q^2 + q^5 + q^7 - q^12 - q^15 + q^22 + q^26 + ...

    我在 blog.dreamshire.com 上的博客有一个 perl 程序,可以在 10 秒内解决这个问题。

    【讨论】:

      【解决方案3】:

      3176 解决问题了吗?它们形成了一个很好的集合,每次都是对相同基本问题的概括。做更简单的问题可能会让您深入了解 78 的解决方案。

      【讨论】:

      • 可悲的是,能被 1000000 整除太大了。我无法使用问题 76 的解决方案来解决它
      【解决方案4】:

      这里有一些提示:

      1. 被一百万整除与仅仅大于一百万不同。一百万 = 1,000,000 = 10^6 = 2^6 * 5^6。

      2. 所以问题是要找到一个最低的 n,使 p(n) 的因子包含六个 2 和六个 5。

      【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2011-05-13
      相关资源
      最近更新 更多