这是有问题的问题:Problem #78
这让我发疯了。我一直在研究这个问题几个小时,我已经能够降低查找将n
硬币堆叠到O(n/2)
的方法的复杂程度,但即使有了这些改进和从n
开始p(n)
接近一百万,我仍然无法在一分钟内得到答案。实际上根本没有。
是否有任何提示可以帮助我解决这个问题?
请记住,我不想要一个完整的解决方案,这里不应该发布任何功能性解决方案,以免破坏其他人的问题。这就是我没有包含任何代码的原因。
答案 0 :(得分:10)
Wikipedia可以在这里帮到你。我假设您已经拥有的解决方案是递归,例如“中间函数”部分中的递归。这可以用来找到欧拉问题的解决方案,但速度不快。
更好的方法是在下一节中使用基于pentagonal number theorem的递归。这个定理的证明不是直截了当的,所以我不认为问题的作者希望你自己提出这个定理。相反,它是其中一个问题,他们希望在那里搜索一些文献。
答案 1 :(得分:3)
这个问题实际上是要求在整数分区序列中找到可被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 ......(Sloane的A001318)。
我们有以下生成函数,它使用五角形数字作为指数:
1 - q - q ^ 2 + q ^ 5 + q ^ 7 - q ^ 12 - q ^ 15 + q ^ 22 + q ^ 26 + ...
我的博客blog.dreamshire.com有一个perl程序可以在10秒内解决这个问题。
答案 2 :(得分:2)
答案 3 :(得分:0)
这里有一些提示:
100万的可分性与大于100万的不同是不一样的。 100万= 1,000,000 = 10 ^ 6 = 2 ^ 6 * 5 ^ 6.
所以问题是要找到一个最低的n,以便p(n)的因子包含6个2和6个5。