Python显示int的长度是多少?
这里有两个函数,用来求一个数的素数因子。 作品:三联画 显然,第二个代码的运行速度要快得多,但为什么它输出的最大因子是long type而不是intPython显示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)中,最后
>>> 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
along
?
答案取决于您的python运行时:
(2**31-1)
或2147483647
,小于65126264424
(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)