【发布时间】:2018-07-28 16:53:47
【问题描述】:
我最近开始学习 python,为了熟悉这些概念,我开始解决欧拉问题。我一直在尝试解决Euler's problem number 12,但是我的代码运行了很长时间(超过 10 分钟并且仍在运行)。我上网查了一下,跑了这段代码,没想到只用了11秒。但我无法理解两者之间的区别。如果有人能帮助我理解其中的区别,真的很感激
我的代码 #1:
from time import time
import math
def divisors(n):
n = int(n)
sqrt = int(math.sqrt(n))
result = sum(2 for i in range(1, sqrt+1) if n%i == 0)
for i in range(1, n+1):
if i**2 == n:
result = result - 1
return result
i = 1
num = 0
a = 0
t = time()
while a < 500:
num = num+i
print(num, i)
i = i+1
a = divisors(num)
print(a)
tt = time() - t
print(tt)
我的代码 #2
from time import time
import math
def divisors(n):
n = int(n)
sqrt = int(math.sqrt(n))
for i in range(1, n+1):
result = sum(2
for i in range(1, sqrt+1) if n%i == 0)
if i**2 == n:
result = result - 1
return result
i = 1
num = 0
a = 0
t = time()
while a < 500:
num = num+i
print(num, i)
i = i+1
a = divisors(num)
print(a)
tt = time() - t
print(tt)
耗时 11 秒的代码:
import math
from time import time
t = time()
def divisors(n):
number_of_factors = 0
for i in range(1, int(math.ceil(math.sqrt(n)))):
if n % i == 0:
number_of_factors +=2
else:
continue
return number_of_factors
x=1
for y in range(2,1000000):
x += y
if divisors(x) >= 500:
print x
break
tt = time()-t
print tt
【问题讨论】:
-
您的代码 #2 在循环中计算
result,应该在循环之外。 -
code#1 怎么样?