我编写了这个脚本来确定第一个具有 500 多个因子的三角数(一个项目欧拉问题),并在 python2.7 和 python3.3 上运行它。我希望它们花费或多或少相同的时间,但 python3 花费的时间是 python2.7 的两倍多。这背后的原因可能是什么?
def highest_power(integer,prime):
i=0
while integer%prime**i==0:
i+=1
return i-1
def n_factors(integer):
number_of_factors=1
start=2
while integer>1 and integer>=start:
number_of_factors=number_of_factors*(highest_power(integer,start)+1)
integer=integer/start**highest_power(integer,start)
start+=1
return number_of_factors
def main(number_of_factors):
number_of_factors_list=[1,1] # Initialized with number of factors for m=1 and 2
m=3
while number_of_factors_list[-1]*number_of_factors_list[-2]<number_of_factors:
if m%2!=0:
number_of_factors_list.append(n_factors(m))
elif m%2==0:
number_of_factors_list.append(n_factors(m/2))
m+=1
return (m-2)*(m-1)/2
if __name__=='__main__':
print(main(500))
这是他们的时间
$ time python2 script.py
real 0m12.787s
user 0m12.788s
sys 0m0.000s
$ time python3 script.py
real 0m27.738s
user 0m27.739s
sys 0m0.000s
我在 ubuntu 13.10 64 位上运行它,使用 python2.7 和 python3.3 的预编译二进制文件。