Project Euler Problem 6: Sum square difference

The sum of the squares of the first ten natural numbers is,

$$1^2 + 2^2 + ... + 10^2 = 385$$

The square of the sum of the first ten natural numbers is,

$$(1 + 2 + ... + 10)^2 = 55^2 = 3025$$

Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640.

Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.

Version 1¶

In [1]:
from six.moves import range

In [2]:
sum_sq_diff = lambda n: sum(range(1, n+1))**2 - sum(i**2 for i in range(1, n+1))

In [3]:
sum_sq_diff(10)

Out[3]:
2640
In [4]:
sum_sq_diff(100)

Out[4]:
25164150

Version 2 - Simple Math¶

$$\sum_{k=1}^{n} k^2 = \frac{n(n+1)(2n+1)}{6}$$

$$\sum_{k=1}^{n} k = \frac{n(n+1)}{2}$$

$$\left(\sum_{k=1}^{n} k\right)^2 - \sum_{k=1}^{n} k^2 = \left(\frac{n(n+1)}{2}\right)^2 - \frac{n(n+1)(2n+1)}{6} = \frac{n(3n+2)(n-1)(n+1)}{12}$$

In [5]:
sum_sq_diff = lambda n: n*(3*n+2)*(n-1)*(n+1)/12

In [6]:
sum_sq_diff(100)

Out[6]:
25164150.0

Doesn't get simpler than this..?