Python 显示整数一样长?
Python displaying ints as long?
这里有两个函数可以求一个数的质因数。
致谢:三联画
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
很明显第二个代码运行速度快很多,但是为什么它输出的最大因子是long-type而不是int?
>>> prime_factors1(65126264424)
[2, 2, 2, 3, 13, 29, 7197863]
>>> prime_factors2(65126264424)
[2, 2, 2, 3, 13, 29, 7197863L]
区别如下。在prime_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
,则这不会更改 n
的类型,无论多小,结果仍然是 long
)。因此问题变成:Is 65126264424
a long
?
答案取决于您的 python 运行时间:
- 在 32 位运行时,您通常有 32 位整数,最大值为
(2**31 - 1)
或 2147483647
,小于 65126264424
。
- 在 64 位运行时,您通常有 64 位整数,最大值为
(2**63 - 1)
或 9223372036854775807
,大于 65126264424
。
查看 sys.maxint
的输出,它应该小于 65126264424
。
这里有两个函数可以求一个数的质因数。 致谢:三联画
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
很明显第二个代码运行速度快很多,但是为什么它输出的最大因子是long-type而不是int?
>>> prime_factors1(65126264424)
[2, 2, 2, 3, 13, 29, 7197863]
>>> prime_factors2(65126264424)
[2, 2, 2, 3, 13, 29, 7197863L]
区别如下。在prime_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
,则这不会更改 n
的类型,无论多小,结果仍然是 long
)。因此问题变成:Is 65126264424
a long
?
答案取决于您的 python 运行时间:
- 在 32 位运行时,您通常有 32 位整数,最大值为
(2**31 - 1)
或2147483647
,小于65126264424
。 - 在 64 位运行时,您通常有 64 位整数,最大值为
(2**63 - 1)
或9223372036854775807
,大于65126264424
。
查看 sys.maxint
的输出,它应该小于 65126264424
。