我是python的新手,我对两个相对简单的代码块的性能感到困惑.第一个函数在给定素数列表的情况下生成数n的素数因子分解.第二个生成n的所有因子的列表.我会prime_factor比factors(对于相同的n)更快,但事实并非如此.我不是在寻找更好的算法,而是我想要理解为什么prime_factor这么慢factors.
def prime_factor(n, primes):
prime_factors = []
i = 0
while n != 1:
if n % primes[i] == 0:
factor = primes[i]
prime_factors.append(factor)
n = n // factor
else: i += 1
return prime_factors
import math
def factors(n):
if n == 0: return []
factors = {1, n}
for i in range(2, math.floor(n ** (1/2)) + 1):
if n % i == 0:
factors.add(i)
factors.add(n // i)
return list(factors)
Run Code Online (Sandbox Code Playgroud)
使用timeit模块,
{ …