50 lines
1.2 KiB
Python
50 lines
1.2 KiB
Python
#!/usr/bin/python3
|
|
|
|
# The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.
|
|
# The first ten terms would be:
|
|
#
|
|
# 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
|
|
#
|
|
# Let us list the factors of the first seven triangle numbers:
|
|
#
|
|
# 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
|
|
#
|
|
# We can see that 28 is the first triangle number to have over five divisors.
|
|
#
|
|
# What is the value of the first triangle number to have over five hundred divisors?
|
|
|
|
from timeit import default_timer
|
|
from projecteuler import count_divisors
|
|
|
|
def main():
|
|
start = default_timer()
|
|
|
|
i = 0
|
|
triang = 0
|
|
finished = 0
|
|
|
|
# Generate all triangle numbers until the first one with more than 500 divisors is found.
|
|
while not finished:
|
|
i = i + 1
|
|
triang = triang + i
|
|
|
|
# Use the function implemented in projecteuler.py to count divisors of a number.
|
|
if count_divisors(triang) > 500:
|
|
finished = 1
|
|
|
|
end = default_timer()
|
|
|
|
print('Project Euler, Problem 12')
|
|
print('Answer: {}'.format(triang))
|
|
|
|
print('Elapsed time: {:.9f} seconds'.format(end - start))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|