[Project Euler] Problème 12

Icon for post #62

Oui, je suis de nouveau un “projecteuler-addict“… aurai-je le maximum des points à mon BAC pour autant, cela reste à prouver, mais au moins j’aurai tout fait pour :P En cette fin d’après-midi, c’est au problème n°12 que je me suis attaqué… voici l’énoncé :

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …

Let us list the factors of the first seven triangle numbers:

     1: 1
     3: 1,3
     6: 1,2,3,6
    10: 1,2,5,10
    15: 1,3,5,15
    21: 1,3,7,21
    28: 1,2,4,7,14,28

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

En fait, j’ai écris plusieurs versions du solveur (en PHP), juste pour manipuler la récurrence et les variables statiques. ;) Voici la première version du programme. Notez la fonction triangle_number, totalement inutile mais assez amusante à coder (utilisation d’une variable de cache statique à cause des erreurs d’imbrication dues à la récurrence sur de grands nombres) :
Read more »

[Project Euler] Problème 21, vive le BruteForcing :p

Icon for post #54

…parce que c’est quand même particulièrement bon de voir son ordinateur bosser à plein temps pour une fois! Pour rappel, Project Euler (en anglais) est un site qui propose des dizaines de problèmes mathématiques à résoudre grâce à une logique implacable, des algorithmes de programmation très poussés… ou tout simplement avec la très connue méthode dite de Brute Force ! (en gros on tente de créer un algorithme pas trop lent et on laisse l’ordi exécuter des calculs monstrueux en priant pour que ça ne prenne pas trop de temps et que l’ordi ne plante pas à 99% de la recherche) ^^

Je suis tombé tout à l’heure sur le Problème 21 dont voici l’énoncé :

Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
If d(a) = b and d(b) = a, where a ≠ b, then a and b are an amicable pair and each of a and b are called amicable numbers.

For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.

Evaluate the sum of all the amicable numbers under 10000.

Peut-être est-il possible de trouver la solution de tête (tous mes voeux de no-lifitude à ceux qui en sont capables), mais pourquoi faire simple quand on peut faire compliqué, hein ? Voici donc mon petit programme en PHP :
Read more »