Dandy糖果和OEIS

Dan有一个相当成功的开放问题继续浏览他的博客。

如果我给你一些立体糖果,它们最少需要多少包装?

在他的帖子的评论中,出现了很多解决问题的好方法。我自己也试过几次。从列出前几个条目开始,并尝试手动查找解决方案。1颗糖果,(1,1,1)立方体:表面积6。可以用(3,1,1)做3个糖果。表面积14。但像20岁这样的人有几个选择。(10,2,1)的表面积为64,但(5,2,2)的表体积为48。

从那篇论文中,我能够生成最小表面积序列的开头:6、10、14、16、22、22、30、24……然后我在OEIS上搜索,结果是https://oeis.org/A075777.

然后,我决定尝试用基本的python对该算法进行编码,这是一个很好的练习,所以这里是我的脚本: 

(谨慎:此脚本生成不准确的结果,它是不准确的OEIS算法的脚本。我改进后的脚本在这篇文章中更详细)

这个算法与其他人在Dan的评论线程中使用的一些算法非常相似。但这就是它变得有趣的地方。除非我的代码中有错误(完全可能!),否则我认为我们已经破坏了这个算法。丹经常给一些此处为打破算法的数字事实上,其中一些破坏了OEIS上的算法:

使用OEIS上描述的算法,取n=1332:
立方根为~11.002
楼层是11,但既不是11也不是10除以n。
9除以n。s1=9
n/9=148
平方根(148)=~12.166
底数是12,但我们需要一次减去1,直到得到148:4的除数。
s2=4
则s3=37
这就得到了1034的表面积。
然而,最小表面积由以下实体给出6*6*37.  表面积为960在这种情况下。
当n=68和n=74634时,算法也失效。
我们可以看到算法似乎遇到的问题是第一个除数同时使用了太多的素因子最大的立方根下n的除数。我正在通知OEIS(我需要一个帐户!),除非有人看到我的错误。
这里有很多好的数学实践!
更新:我改进了算法,使其循环通过立方根下的s1s,将n除以平方根下的s2s。这要慢得多,但应该是准确的。

下面是一个文件,其中显示了最多5000个结果:minSA csv高达5000

这里有一个多达30000的列n,s1,s2,s3,minSA:最小表面面积SF高达30000

评论
  • 接得好!如果删除第11行和第21行中的“while”循环,算法的运行速度可以提高40%左右;选择最接近面积平方根的对{s2,s3}是安全的。

    • 斯科特 说:

      谢谢!是的,现在我看到通过除数降低s2只会增加表面积。这可能也是一件值得学生探索的好事情。