Найти тему
Забугорные записки

Проект Эйлера. Задача 12

Треугольное число с большим количеством делителей

Последовательность треугольных чисел образуется путем сложения натуральных чисел. К примеру, 7-ое треугольное число равно 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Первые десять треугольных чисел:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Перечислим делители первых семи треугольных чисел:

1: 1
3: 1, 3
6: 1, 2, 3, 6
10: 1, 2, 5, 10
15: 1, 3, 5, 15
21: 1, 3, 7, 21
28: 1, 2, 4, 7, 14, 28

Как мы видим, 28 - первое треугольное число, у которого более пяти делителей.

Каково первое треугольное число, у которого более пятисот делителей?

В седьмой задаче была сделана функция, которая смотрит, является ли число простым. На её основе сделаем функцию, которая будет считать количество делителей:

def count_dividers(number):
number_of_dividers = 0
for i in range(1, int(number**0.5)+1):
if number % i == 0:
number_of_dividers += 2
return number_of_dividers

Немного подробнее о том, почему количество делителей увеличивается на два, а не на один. Так как делители идут парами (6 = 2*3), если найдём один из пары, существование второго будет автоматически доказано.

Теперь будем перебирать треугольные числа до тех пор, пока количество делителей не превысит 500:

answer = 1
i = 2 # Эта переменная нужна, чтобы перебирать
# именно треугольные числа
while count_dividers(answer) < 500:
answer += i
i += 1
print(answer)

# Output: 76576500