一个低效但十分有趣的圆周率算法(python实现)
本帖最后由 jthylkl 于 2019-1-17 17:13 编辑昨天在B站看到了一个非常有意思的视频:一个计数谜题的意外答案
讲的是在光滑的地面上,一个大方块撞向一个小方块,小方块在墙壁和大方块之间做弹性碰撞,并记录产生的碰撞次数。当大方块的质量是小方块的100的d次方倍时,所产生的碰撞次数恰好是圆周率的前d+1个有效数字。
比如:大方块是小方块100倍时,会碰撞31次;100000000倍时,碰撞31415次
这也太神奇了吧,与圆毫无关系的物理问题中竟然隐藏了一个神秘的数字:π!
虽然暂时还不知道原理是什么,但我迫不及待想编个程序验证一下了:
**** Hidden Message *****
其中用到了弹性碰撞速度计算公式
不难看出这个算法的效率很低,因为每多算一位就会增加10倍多的计算量,计算量随精确度增加呈现指数式的增长
计算5位用了20分钟……
(速度慢的原因找到了,是vscode输出拖慢了速度,调试用的print我删了,实测算5位0.35秒)
不过它仍然是一个非常棒的算法,因为它实在是太有趣了{:10_257:}
---------------------
知乎已经有解答了:一道弹性碰撞的物理题,结果为什么会出现 π ?
---------------------
哈哈哈哈 66666 {:10_254:}{:10_257:}目瞪口呆 看看 {:10_254:} 6666666 大佬 很有想法
好厉害! 666 感谢楼主 {:10_256:}确实是个有趣的过程。 朕想知道 good!我也看了 感谢分享 ohong~ {:10_256:} 数学的重要性{:10_279:} 666 666 动量守恒定律,学习一下