使用生成器获取三角形编号,而不是单独计算每个三角形编号
from timeit import timeit
def triangle_numbers():
count = 1
num = 0
while True:
num += count
count += 1
yield num
def count_divisors(n):
count = 0
if n==1:
return 1
for i in range(1, 1 + int(n ** 0.5)):
if n % i == 0:
count += 2
return count
print(timeit('next(num for num in triangle_numbers() if count_divisors(num) >= 500)',
globals=globals(), number=1))
给了我
3.8404819999996107
(秒)在我的机器上。您可能还可以改进除数计数。
真正让你慢下来的是打电话
nthtriangle
和
numberoffactors
在你的循环中不止一次!另外,这些电话
print
不是免费的。