Python 2 里面的 xrange 为什么会出现 OverflowError?

2019-09-26 10:17:02 +08:00
 jzq526

在网上看到一个数学题,整数 33 能否用三个整数的立方和表示。正好刚开始学 Python,就写了个小程序:

import sys
max=sys.maxint
min=-sys.maxint-1
for x in xrange(min,max):
    for y in xrange(min,max):
        for z in xrange(min,max):
            if x**3+y**3+z**3==33:
                print "x=",x
                print "y=",y
                print "z=",z

简单粗暴,就是不停地尝试。 但在运行时,提示:OverflowError: xrange() result has too many items 按照书上的说法,xrange 每次循环只会产生一个对象,应该不会这样。range 每次都是先生成所有的数据,所以容易出现这个问题,而且性能也不好。 以上是 python2 程序。

(因为书上提到 python3 中的 range 和 python2 中的 xrange 相同,所以把程序换成了 python3,现在正在运行)

2900 次点击
所在节点    Python
8 条回复
robinlovemaggie
2019-09-26 10:42:32 +08:00
求立方和有必要遍历负值域吗?
Raven316
2019-09-26 10:49:41 +08:00
@robinlovemaggie #1 有吧,不过这也太暴力了。。
gjquoiai
2019-09-26 11:05:46 +08:00
Vegetable
2019-09-26 11:26:06 +08:00
还 33 呢?人家 42 都算完了...
不要这么尝试了,这能算出来,超算面子往哪搁
jzq526
2019-09-26 11:29:04 +08:00
@Raven316 @robinlovemaggie 这个题目很古老,是个猜想。反正也没有什么更好的办法,只能枚举。而且已经有人枚举出来了,答案是:( 8866128975287528 )^3+(–8778405442862239 )^3+(–273611468807040 )^3=33。据说他们正在找能得出 42 的组合。
都是玩的,好像也没有什么真正的价值
jzq526
2019-09-26 11:30:00 +08:00
@Vegetable 42 算出来了?我在搜搜。有个数学家说自己用了笔记本花了好几天时间才找到的
jzq526
2019-09-26 11:30:54 +08:00
@Vegetable (-80538738812075974)^3 + 80435758145817515^3 + 12602123297335631^3=42
Raven316
2019-09-26 11:36:37 +08:00
@jzq526 #7 只能说 666

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/604310

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX