首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

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

  •  
  •   jzq526 · 46 天前 · 907 次点击
    这是一个创建于 46 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在网上看到一个数学题,整数 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,现在正在运行)

    第 1 条附言  ·  46 天前
    这个程序基本上就是靠 CPU 和时间堆出来的。
    不过这不是重点,重点是 xrang 为什么报错
    谢谢 @gjquoiai 朋友,给出了一个解释,python2 的 xrang 和 rang 都受限于 C 语言的长整型的表示能力。
    8 回复  |  直到 2019-09-26 11:36:37 +08:00
        1
    robinlovemaggie   46 天前
    求立方和有必要遍历负值域吗?
        2
    Raven316   46 天前   ♥ 1
    @robinlovemaggie #1 有吧,不过这也太暴力了。。
        4
    Vegetable   46 天前
    还 33 呢?人家 42 都算完了...
    不要这么尝试了,这能算出来,超算面子往哪搁
        5
    jzq526   46 天前   ♥ 1
    @Raven316 @robinlovemaggie 这个题目很古老,是个猜想。反正也没有什么更好的办法,只能枚举。而且已经有人枚举出来了,答案是:( 8866128975287528 )^3+(–8778405442862239 )^3+(–273611468807040 )^3=33。据说他们正在找能得出 42 的组合。
    都是玩的,好像也没有什么真正的价值
        6
    jzq526   46 天前
    @Vegetable 42 算出来了?我在搜搜。有个数学家说自己用了笔记本花了好几天时间才找到的
        7
    jzq526   46 天前
    @Vegetable (-80538738812075974)^3 + 80435758145817515^3 + 12602123297335631^3=42
        8
    Raven316   46 天前
    @jzq526 #7 只能说 666
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   982 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 19:23 · PVG 03:23 · LAX 11:23 · JFK 14:23
    ♥ Do have faith in what you're doing.