mirror of
https://github.com/correl/euler.git
synced 2024-11-27 11:09:54 +00:00
Problem 045
git-svn-id: file:///srv/svn/euler@71 e5f4c3ec-3c0c-11df-b522-21efaa4426b5
This commit is contained in:
parent
29cdc8556a
commit
b56f368d3c
1 changed files with 54 additions and 0 deletions
54
e045.py
Normal file
54
e045.py
Normal file
|
@ -0,0 +1,54 @@
|
|||
"""After 40755, what is the next triangle number that is also pentagonal and hexagonal?
|
||||
|
||||
Triangle, pentagonal, and hexagonal numbers are generated by the following formulae:
|
||||
|
||||
Triangle Tn=n(n+1)/2 1, 3, 6, 10, 15, ...
|
||||
Pentagonal Pn=n(3n-1)/2 1, 5, 12, 22, 35, ...
|
||||
Hexagonal Hn=n(2n-1) 1, 6, 15, 28, 45, ...
|
||||
|
||||
It can be verified that T285 = P165 = H143 = 40755.
|
||||
|
||||
Find the next triangle number that is also pentagonal and hexagonal.
|
||||
"""
|
||||
|
||||
def triangle_generator(start = 0):
|
||||
n = start
|
||||
while True:
|
||||
n = n + 1
|
||||
yield n * (n + 1) / 2
|
||||
def pentagonal_generator(start = 0):
|
||||
n = start
|
||||
while True:
|
||||
n = n + 1
|
||||
yield n * (3 * n - 1) / 2
|
||||
def hexagonal_generator(start = 0):
|
||||
n = start
|
||||
while True:
|
||||
n = n + 1
|
||||
yield n * (2 * n - 1)
|
||||
|
||||
MIN = 40755
|
||||
|
||||
def main():
|
||||
pent_count = 0
|
||||
tri_count = 0
|
||||
for hex in hexagonal_generator():
|
||||
if hex <= MIN:
|
||||
continue
|
||||
# Catch up the other generators
|
||||
for pent in pentagonal_generator(pent_count):
|
||||
pent_count = pent_count + 1
|
||||
if pent >= hex:
|
||||
break
|
||||
if pent > hex:
|
||||
continue
|
||||
for tri in triangle_generator(tri_count):
|
||||
tri_count = tri_count + 1
|
||||
if tri >= hex:
|
||||
break
|
||||
if tri > hex:
|
||||
continue
|
||||
print 'Next number is:', hex
|
||||
break
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in a new issue