Oggi affronteremo il Problema n° 6 di Project Euler!
Progetto Eulero Problema 6
"La somma dei quadrati dei primi dieci numeri naturali è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.
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."
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
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!
------------------------------------------------------------------------------------------------------------------
La mia soluzione
RispondiEliminadef 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 ;)
Che posso dire se non OTTIMO!
RispondiEliminaNo, non puoi dirlo. Il tuo è sicuramente più efficiente. Il mio forse più pythonico e sicuramente più breve e stiloso.
RispondiEliminaComunque, bel blog, continua così!
---
Marco.
Grazie! Non sarai mica Marco Beri ?
RispondiEliminaNo, per lui devi aspettare. Per il momento accontentati di me (:
RispondiEliminaNow, the next one ;)
RispondiEliminaPer il quadrato della somma dei numeri da 1 a 100 credo potresti usare la formula di gauss ed elevare il risultato al quadrato. Così:
RispondiElimina((x*(x+1))/2)**2
Adesso penso ad una formula per calcolare la somma dei quadrati. Ci deve essere ;)
Ciao,
Marco.
Intanto che ci penso:
RispondiEliminadef euler6(n):
return (((n*(n+1))/2)**2) - (sum(x**2 for x in xrange((n + 1))))
Credo di aver risolto. Bello questo problema. ;)
RispondiEliminaEcco:
def euler6(n):
return (((n*(n+1))/2)**2) - ((n*((2*n)+1)*(n+1))/6)
---
Marco.