Solution to problem 12
This commit is contained in:
parent
5b6901aafa
commit
394628d98d
67
src/Python/Problem012.py
Normal file
67
src/Python/Problem012.py
Normal file
@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Created on 01 Jan 2018
|
||||
|
||||
@author: David Doblas Jiménez
|
||||
@email: daviddoji@pm.me
|
||||
|
||||
Solution for problem 12 of Project Euler
|
||||
https://projecteuler.net/problem=12
|
||||
"""
|
||||
|
||||
import itertools
|
||||
from utils import timeit
|
||||
from math import sqrt, floor
|
||||
|
||||
|
||||
# Returns the number of integers in the range [1, n] that divide n.
|
||||
def num_divisors(n):
|
||||
end = floor(sqrt(n))
|
||||
divs = []
|
||||
for i in range(1, end + 1):
|
||||
if n % i == 0:
|
||||
divs.append(i)
|
||||
if end**2 == n:
|
||||
divs.pop()
|
||||
return 2*len(divs)
|
||||
|
||||
|
||||
|
||||
@timeit("Problem 12")
|
||||
def compute():
|
||||
"""
|
||||
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?
|
||||
"""
|
||||
|
||||
triangle = 0
|
||||
for i in itertools.count(1):
|
||||
# This is the ith triangle number, i.e. num = 1 + 2 + ... + i =
|
||||
# = i*(i+1)/2
|
||||
triangle += i
|
||||
if num_divisors(triangle) > 500:
|
||||
return str(triangle)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
print(f"Result for Problem 12: {compute()}")
|
Loading…
x
Reference in New Issue
Block a user