Код, который является общим для обеих реализаций:
from math import sqrt
def factors(x):
num = 2
sq = int(sqrt(x))
for i in range(2, sq):
if (x % i) == 0:
num += 2
return num + ((1 if sq == sqrt(x) else 2) if x % sq == 0 else 0)
1. Реализация, которая не использует функцию генератора:
i = 1
while True:
if factors(i * (i+1) * 0.5) > 500:
print(int(i * (i+1) * 0.5))
break
i += 1
2. Реализация, которая использует функцию генератора:
def triangle():
i = 1
while True:
yield int(0.5 * i * (i + 1))
i += 1
t = triangle()
while True:
num = t.__next__()
if factors(num) > 500:
print(num)
break
Вопрос:
Первая реализация занимает около 4 секунд, а вторая занимает примерно 8,2 секунды. Почему существует такая большая разница между временем выполнения двух реализаций?