Kev*_*vin 2 python python-2.7 long-integer
所以这里有两个函数来查找数字的素因子.致谢:Triptych /sf/answers/28905971/
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
Run Code Online (Sandbox Code Playgroud)
显然第二个代码的运行速度要快得多,但为什么它输出的最大因子是long-type而不是int?
>>> prime_factors1(65126264424)
[2, 2, 2, 3, 13, 29, 7197863]
>>> prime_factors2(65126264424)
[2, 2, 2, 3, 13, 29, 7197863L]
Run Code Online (Sandbox Code Playgroud)
不同之处如下.在prime_factors1(n),最后一个因素附在此处:
while n > 1:
while n % d == 0:
factors.append(d)
Run Code Online (Sandbox Code Playgroud)
从哪里d开始2(绝对是一个int无论哪个运行时),通过d = d + 1(增加两个int)增长和 - 当它作为一个因素附加时 - 站在7197863(仍然是int).
在prime_factors2(65126264424),但是,你在这里的附加最后一个因素:
if d*d > n:
if n > 1: factors.append(n)
Run Code Online (Sandbox Code Playgroud)
从哪里n开始65126264424并缩小通过n /= d.这不会改变n它开始时的类型long(如果n是a long并且d是a int,结果仍然是long无论多小).现在的问题变成,因此:是65126264424一个long?
答案取决于你的python运行时:
(2**31 - 1)或2147483647小于65126264424.(2**63 - 1)或9223372036854775807大于65126264424.看输出,sys.maxint它应该小于65126264424.
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |