-
Notifications
You must be signed in to change notification settings - Fork 0
/
Problem045.py
45 lines (31 loc) · 1.04 KB
/
Problem045.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
"""
Project Euler Problem 45
========================
Triangle, pentagonal, and hexagonal numbers are generated by the following
formulae:
Triangle T[n]=n(n+1)/2 1, 3, 6, 10, 15, ...
Pentagonal P[n]=n(3n-1)/2 1, 5, 12, 22, 35, ...
Hexagonal H[n]=n(2n-1) 1, 6, 15, 28, 45, ...
It can be verified that T[285] = P[165] = H[143] = 40755.
Find the next triangle number that is also pentagonal and hexagonal.
"""
from math import sqrt, floor
def H_n(n):
return 2*n*n - n
def is_pentagonal(Pn):
""" Solving the quadratic expression we can determine n and see is integer """
n = (1/2 + sqrt(1/4+4*3/2*Pn))/3
return floor(n) == n
def is_triangle(Tn):
""" Solving the quadratic expression we can determine n and see is integer """
n = (-1/2 + sqrt(1/4+4*1/2*Tn))/1
return floor(n) == n
found = False
n = 143 # Start determined by the problem
while not found:
n += 1
new_hex = H_n(n)
if is_triangle(new_hex) and is_pentagonal(new_hex):
found = not found
result = new_hex
print(result)