Euler 6 (Python)

Enunciado 6

La suma de los cuadrados de los primeros diez números naturales es:

12 + 22 + … + 102 = 385

El cuadrado de la suma de los primeros diez números naturales es:

(1 + 2 + … + 10)2 = 552 = 3025

Así que la diferencia entre la suma de los cuadrados de los diez primeros números naturales y el cuadrado de la suma es 3025 − 385 = 2640.

Encontrar la diferencia entre la suma de los cuadrados de los primeros cien números naturales y el cuadrado de la suma.

Solución

La solución fue obtenida utilizando el intérprete interactivo de Python 2.5.2:

>>> def a(n):
...     s = sum(xrange(1,n+1))
...     a1 = s ** 2
...     a2 = sum([x**2 for x in xrange(1,n+1)])
...     return a1, a2, a1-a2
...
>>> a(10)
(3025, 385, 2640)
>>> a(100)
(25502500, 338350, 25164150)

Python tips

  • Con ** podemos elevar un número a cualquier potencia sin necesidad de importar ningún módulo.
  • Para denotar una tupla solo hacen falta las comas (,), no los paréntesis al principio y al final.

About Juanjo

Mi nombre es Juanjo Conti, vivo en Santa Fe y soy Ingeniero en Sistemas de Información. Mi lenguaje de programación de cabecera es Python; lo uso para trabajar, estudiar y jugar. Como hobby escribí un libro de cuentos que se puede descargar gratuitamente.
This entry was posted in Aprendiendo Python, Problemas and tagged , . Bookmark the permalink.
  • http://blog.tordek.com.ar Tordek

    El Proyecto Euler siempre me tiene una duda:

    ¿Cuánto se supone que se haga con programación, y cuanto con saber matemática?

    Por ejemplo… el cuadrado de la suma de los n primeros naturales se consigue con (n*(n-1)/2)^2. Con 10 segundos de google, se encuentra que la suma de los cuadrados es (n *(n+1)*(2n+1))/6… Y resolver ambas fórmulas es O(1) vs O(n)… que si bien es insignificante para 100, es más interesante, al menos para mi.

  • Juanjo

    Creo que la idea es que importan más las matemáticas que cómo implementar la solución. Para este caso particular tu sugerencia es excelente. No se si siempre podés valerte de propiedades u otros atajos.