首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python显示ints的长度是多少?

Python显示ints的长度是多少?
EN

Stack Overflow用户
提问于 2016-05-28 20:53:27
回答 1查看 78关注 0票数 2

这里有两个函数,用来找出一个数的素因子。学分: Triptych https://stackoverflow.com/a/412942/6211963

代码语言:javascript
复制
def prime_factors1(n):
    """Returns all the prime factors of a positive integer"""
    factors = []
    d = 2
    while n > 1:
        while n % d == 0:
            factors.append(d)
            n /= d
        d = d + 1

    return factors

def prime_factors2(n):
    """Returns all the prime factors of a positive integer"""
    factors = []
    d = 2
    while n > 1:
        while n % d == 0:
            factors.append(d)
            n /= d
        d = d + 1
        if d*d > n:
            if n > 1: factors.append(n)
            break
    return factors        

显然,第二个代码运行得更快,但是为什么它输出的最大因素是长类型而不是int呢?

代码语言:javascript
复制
>>> prime_factors1(65126264424)
[2, 2, 2, 3, 13, 29, 7197863]

>>> prime_factors2(65126264424)
[2, 2, 2, 3, 13, 29, 7197863L]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 22:01:27

不同之处如下。在prime_factors1(n)中,最后一个因素附在这里:

代码语言:javascript
复制
while n > 1:
    while n % d == 0:
        factors.append(d)

d2 (无论哪个运行时都是一个int )开始,通过d = d + 1 (添加两个int)增长,而当它作为一个因素附加时,则位于7197863 (仍然是一个int)。

然而,在prime_factors2(65126264424)中,您在这里附加了最后一个因素:

代码语言:javascript
复制
if d*d > n:
    if n > 1: factors.append(n)

n65126264424开始,通过n /= d收缩。如果nlong开始,这不会改变它的类型(如果n是一个long,而d是一个int,那么不管多么小,结果仍然是一个long )。因此,问题是: a

答案取决于您的python运行时:

  1. 在32位运行库中,通常有32位整数,这些整数在(2**31 - 1)2147483647 (小于65126264424 )时最大。
  2. 在64位运行库中,通常有64位整数,这些整数在(2**63 - 1)9223372036854775807 (大于65126264424 )时最大。

查看sys.maxint的输出,它应该比65126264424小。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37503640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档