lunedì 28 febbraio 2011

Progetto Eulero Problema 6

Project Euler

Oggi affronteremo il Problema n° 6 di Project Euler!







Progetto Eulero Problema 6
"La somma dei quadrati dei primi dieci numeri naturali è
12 + 22 + … + 102 = 385
Il quadrato della somma dei primi dieci numeri naturali è
(1 + 2 + … + 10)2 = 552 = 3025
La differenza tra la somma dei quadrati dei primi dieci numeri naturali e il quadrato della somma degli stessi è 3025 – 385 = 2640.
Trova la differenza tra la somma dei quadrati dei primi cento numeri naturali e il quadrato della somma degli stessi."
Anche questo problema è piuttosto semplice, ci basta infatti calcolare la somma dei quadrati e il quadrato della somma di ogni n da 1 a 100.
Vediamo il codice...

def find_the_difference(num):
    somma_q = 0                               #Somma dei quadrati
    quad_s = 0                                   #Quadrato della somma
    for n in xrange(1,num+1):           #Per ogni n da 1 a 100 esegue le operazioni
        somma_q+=n**2                     #somma_q + n elevato alla seconda
        quad_s+=n                              #quad_s + n
    quad_s = quad_s**2                    #a fine ciclo (quad_s elevato alla seconda)
    difference = quad_s - somma_q 
    print difference  


Non credo ci sia bisogno di ulteriori spiegazioni, adesso provate voi!
Vi aspetto per il Problema n°7!


------------------------------------------------------------------------------------------------------------------

9 commenti:

  1. La mia soluzione


    def euler11(n):
    return (sum(xrange((n + 1)))**2) - (sum(x**2 for x in xrange((n + 1))))

    Occhio, però, che una funzione ritorna e non stampa ;)

    RispondiElimina
  2. No, non puoi dirlo. Il tuo è sicuramente più efficiente. Il mio forse più pythonico e sicuramente più breve e stiloso.

    Comunque, bel blog, continua così!

    ---
    Marco.

    RispondiElimina
  3. Grazie! Non sarai mica Marco Beri ?

    RispondiElimina
  4. No, per lui devi aspettare. Per il momento accontentati di me (:

    RispondiElimina
  5. Per il quadrato della somma dei numeri da 1 a 100 credo potresti usare la formula di gauss ed elevare il risultato al quadrato. Così:

    ((x*(x+1))/2)**2

    Adesso penso ad una formula per calcolare la somma dei quadrati. Ci deve essere ;)

    Ciao,
    Marco.

    RispondiElimina
  6. Intanto che ci penso:

    def euler6(n):
    return (((n*(n+1))/2)**2) - (sum(x**2 for x in xrange((n + 1))))

    RispondiElimina
  7. Credo di aver risolto. Bello questo problema. ;)
    Ecco:


    def euler6(n):
    return (((n*(n+1))/2)**2) - ((n*((2*n)+1)*(n+1))/6)

    ---
    Marco.

    RispondiElimina