Python显示int的长度是多少?

Python显示int的长度是多少?,python,python-2.7,long-integer,Python,Python 2.7,Long Integer,这里有两个函数,用来求一个数的素数因子。 作品:三联画 显然,第二个代码的运行速度要快得多,但为什么它输出的最大因子是long type而不是int >>> prime_factors1(65126264424) [2, 2, 2, 3, 13, 29, 7197863] >>> prime_factors2(65126264424) [2, 2, 2, 3, 13, 29, 7197863L] 区别如下。在prime\u factors1(n)中,最后

这里有两个函数,用来求一个数的素数因子。 作品:三联画

显然,第二个代码的运行速度要快得多,但为什么它输出的最大因子是long type而不是int

>>> prime_factors1(65126264424)
[2, 2, 2, 3, 13, 29, 7197863]

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

区别如下。在
prime\u factors1(n)
中,最后一个因子附加在这里:

while n > 1:
    while n % d == 0:
        factors.append(d)
其中
d
开始于
2
(无论哪个运行时都肯定是
int
),通过
d=d+1
(两个
int
)增长,并且当它作为一个因子添加时,位于
7197863
(仍然是
int

但是,在
prime_factors2(65126264424)
中,您将最后一个因子添加到此处:

if d*d > n:
    if n > 1: factors.append(n)
其中
n
65126264424
开始,通过
n/=d
收缩。这不会改变
n
的类型,如果它以
long
开头(如果
n
long
并且
d
int
,结果仍然是
long
,无论多小)。因此问题变成了:
65126264424
a
long

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

  • 在32位运行时中,您通常有32位整数,其最大值为
    (2**31-1)
    2147483647
    ,小于
    65126264424
  • 在64位运行时,您通常有64位整数,其最大值为
    (2**63-1)
    9223372036854775807
    ,大于
    65126264424

  • 查看
    sys.maxint
    的输出,它应该小于
    65126264424

    在第二个版本中,您添加了
    n
    ,这是一个很长的值。我无法在Linux x8664上用Python 2.7.11复制它。我无法在Linux x8664上用Python 2.7.11复制它。这就是我正在使用的:Jupyter QtConsole 4.2.0。Python 2.7.11 | Anaconda 4.0.0(64位)| IPython 4.1.2在Windows 10 64位上:
    65126264424>sys.maxint
    返回True,在Ubuntu 12.04 64位上返回False。
    if d*d > n:
        if n > 1: factors.append(n)