Хотя ваш код занимает всего 3 секунды на моей машине для вычисления желаемого результата, мы можем сократить это время вдвое, улучшив эту строку:
for i in range (1,x-1):
Следующий по величине коэффициент, после x
сам, который мы не считаем, равен x / 2
, поскольку 2
- следующий наименьший делитель после 1
.Это позволяет нам переписать вышеприведенное как:
for i in range(1, x // 2 + 1):
Кроме того, использование range(1, x - 1)
делает f(2)
неправильным, если вы захотите повторно использовать этот код в другой программе позже.Переделка вашего кода для вышеперечисленных проблем и некоторых стилей:
# Find three consecutive perfect numbers after 6
def f(x):
"Find the sum of all factors."
factors = []
for i in range(1, x // 2 + 1):
if x % i == 0:
factors.append(i)
return sum(factors)
count = 0
number = 6
perfect_numbers = []
while count < 3:
number += 1
if number == f(number):
perfect_numbers.append(number)
count += 1
print(perfect_numbers)