Home > Project Euler, python > Problem euler #45

Problem euler #45

riangle, 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.

Analisi:

Analogamente al problema 44, dal testo sappiamo che la formula per calcolare un numero
pentagonale è:

Pn=n(3n-1)/2

per il numero triangolare:

Tn=n(n+1)/2

per il numero esagonale:

Hn=n(2n−1)

Da wikipedia ricaviamo le formule per sapere se un numero ‘n’, è
triangolare:

sqrt(8*n + 1) - 1)/2

e pentagonale:

sqrt(24*n + 1) + 1)/6

Ora basta ciclare sui soli numeri esagonali e verificare che il risultato sia
triangolare e pentagonale.

python:

import time
import math

ts = time.time()

def is_triangolar(n):
    res = (math.sqrt(8*n + 1) - 1)/2 # is n triangolar formulae
    return res % 1 == 0

def is_pentagonal(n):
    res = (math.sqrt(24*n + 1) + 1)/6 # is n pentagonal formulae
    return res % 1 == 0

def get_hexagonals():
    n = 144
    while True:
        yield n*(2*n - 1)
        n += 1
        
res = 40755
for i in get_hexagonals():
    if is_triangolar(i) and is_pentagonal(i):
        res = i
        break

print "problem euler 45: {} \nelapsed time: {}sec".format(res, time.time() - ts)

Categorie:Project Euler, python
  1. Non c'è ancora nessun commento.
  1. No trackbacks yet.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: