这里有两个函数,用来找出一个数的素因子。学分: Triptych https://stackoverflow.com/a/412942/6211963
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呢?
>>> prime_factors1(65126264424)
[2, 2, 2, 3, 13, 29, 7197863]
>>> prime_factors2(65126264424)
[2, 2, 2, 3, 13, 29, 7197863L]发布于 2016-05-28 22:01:27
不同之处如下。在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,那么不管多么小,结果仍然是一个long )。因此,问题是:是 a
答案取决于您的python运行时:
(2**31 - 1)或2147483647 (小于65126264424 )时最大。(2**63 - 1)或9223372036854775807 (大于65126264424 )时最大。查看sys.maxint的输出,它应该比65126264424小。
https://stackoverflow.com/questions/37503640
复制相似问题