【发布时间】:2014-04-03 04:29:15
【问题描述】:
下面是一个算法,它找到给定数字 N 的素数分解。我想知道是否有任何方法可以使用 HUGE 数字更快地实现这一点。我说的是20-35位数字。我想尝试让这些尽可能快地进行。有什么想法吗?
import time
def prime_factors(n):
"""Returns all the prime factors of a positive integer"""
factors = []
divisor = 2
while n > 1:
while n % divisor == 0:
factors.append(divisor)
n /= divisor
divisor = divisor + 1
if divisor*divisor > n:
if n > 1:
factors.append(n)
break
return factors
#HUGE NUMBERS GO IN HERE!
start_time = time.time()
my_factors = prime_factors(15227063669158801)
end_time = time.time()
print my_factors
print "It took ", end_time-start_time, " seconds."
【问题讨论】:
-
以上号码你几点钟?
-
不到一秒。但是对于一些20位及以上的数字,需要30多秒!
-
不是每次将
divisor递增 1,而是可以遍历素数。 -
@JacobKudria:大多数时候,附加到列表不需要调整大小。列表大小以这样一种方式缩放,即添加 N 个项目需要花费 O(N) 的总时间。预分配有时可以节省时间,但不多。
标签: python optimization factorization