Euler 006

Publié le 22/12/16

Soit n dans \mathbb{N}^*. Écrire une fonction calculant {\displaystyle\Bigl(\sum_{k=1}^{n}k\Bigr)^{2}-\displaystyle\sum_{k=1}^{n}k^{2}}.
Remarque: l’énoncé original du Project Euler se limite à n=100.
Le résultat est alors 25164150.

  • Première solution

    Bien sûr, ça n’est pas très intéressant
    car {\displaystyle\Bigl(\sum_{k=1}^{n}k\Bigr)^{2}=\displaystyle\frac{n^{2}(n+1)^{2}}{4}} et {\displaystyle\sum_{k=1}^{n}k^{2}=\displaystyle\frac{n(n+1)(2n+1)}{6}}.

    On doit calculer {S(n)=\displaystyle\frac{n^{2}(n+1)^{2}}{4}-\displaystyle\frac{n(n+1)(2n+1)}{6}=\displaystyle\frac{1}{12} (n-1) n (n+1) (3 n+2)}.

  • Deuxième solution

    Admettons qu’on ne veuille pas utiliser les formules donnant {\displaystyle\Bigl(\sum_{k=1}^{n}k\Bigr)^{2}} et {\displaystyle\sum_{k=1}^{n}k^{2}}.
    Si on sait quand même que {\displaystyle\sum_{k=1}^{n}k^{3}=\Bigl(\sum_{k=1}^{n}k\Bigr)^{2}}, alors {S(n)=\displaystyle\sum_{k=1}^{n}k^{2}(k-1)}.

  • Troisième solution

    Ici, on calcule les deux sommes {\displaystyle\sum_{k=1}^{n}k} et {\displaystyle\sum_{k=1}^{n}k^{2}} avec l’instruction sum, appliquée à l’intervalle r=[1,N[.

    Voici une toute petite variante, en mappant une lambda fonction pour éviter l’utilisation du for dans l’indexation: