这是有问题的问题:Problem #78项目欧拉提示问题#78
这让我疯狂。我已经在此工作了几个小时,并且我已经能够减少找到将n
硬币堆叠到O(n/2)
的方法的数量的复杂性,但是即使具有那些改进和从n
开始,其中p(n)
已接近一百万,我仍然无法在一分钟内得出答案。实际上并非如此。
有没有什么提示可以帮助我呢?
请记住,我不想要一个完整的解决方案,不应该有任何功能解决方案张贴在这里,以免破坏其他人的问题。这就是为什么我没有包含任何代码。
这是有问题的问题:Problem #78项目欧拉提示问题#78
这让我疯狂。我已经在此工作了几个小时,并且我已经能够减少找到将n
硬币堆叠到O(n/2)
的方法的数量的复杂性,但是即使具有那些改进和从n
开始,其中p(n)
已接近一百万,我仍然无法在一分钟内得出答案。实际上并非如此。
有没有什么提示可以帮助我呢?
请记住,我不想要一个完整的解决方案,不应该有任何功能解决方案张贴在这里,以免破坏其他人的问题。这就是为什么我没有包含任何代码。
Wikipedia可以帮助你在这里。我假设你已经拥有的解决方案是递归,例如“中间函数”一节中的那个。这可以用来找到欧拉问题的解决方案,但并不快。
更好的方法是在下一节中使用基于pentagonal number theorem的递归。这个定理的证明不是直截了当的,所以我不认为问题的作者希望你自己提出这个定理。相反,这是他们期望进行一些文献检索的问题之一。
这里一些提示:
整除一百万是不是摆明大于一百万同样的事情。 100万= 1,000,000 = 10^6 = 2^6 * 5^6。
所以问题是要找到一个最低的n,以便p(n)的因子包含六个2和六个5。
你确定(2.)吗?如果(2)为真,这将是一个合理的(甚至是最好的)方法,但AFAIK没有p(n)的乘法标识:http://en.wikipedia.org/wiki/Partition_%28number_theory%29 – ShreevatsaR 2009-11-19 19:04:10
此问题实际上是要求查找可由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 - C 1-4 2 + Q^5 + Q^7 - C 1-4 12 - C 1-4 15 + Q^22 + C 1-4 26 + ...
我在blog.dreamshire.com博客有下10秒解决了这个在Perl程序。
您试图在不到一分钟内解决的任何特定原因? – 2009-11-19 18:20:41
这就是欧拉项目的经验法则。直言不讳:如果算法在一分钟内无法解决,它会很糟糕,因此不是一个好的解决方案。我想要一个好的解决方案。 – 2009-11-19 18:44:19
我不能给你任何具体的建议,但我前一段时间发布了一些一般性建议:http://stackoverflow.com/questions/1537306/recommended-reading-for-solving-project-euler-problems/1537531#1537531 – starblue 2009-11-19 18:49:17