Project Euler. | |
Adresse | projecteuler.net |
---|---|
Commercial | Non |
Type de site | Résolution de problèmes mathématiques et algorithmiques |
Langue | Anglais |
Inscription | Gratuite |
Créé par | Colin Hughes, alias euler |
Lancement | |
modifier | |
Project Euler est un site web proposant une série de problèmes mathématiques conçus pour être résolus à l'aide de programmes informatiques. Le but du projet est d'attirer des adultes et des élèves intéressés par les mathématiques et l’informatique. Il comprend actuellement plus de 850 problèmes[Note 1],[1] de difficultés variables, chacun pouvant être résolu en principe en moins d'une minute par un algorithme efficace sur un ordinateur de puissance modeste. De nouveaux problèmes sont progressivement ajoutés, actuellement au rythme d'un toutes les deux semaines, depuis la création du site en 2001. Un forum spécifique à chaque problème est accessible aux utilisateurs qui l'ont résolu. Une section Scores classe également les membres selon le nombre de problèmes résolus. Il existe quatorze niveaux de classement selon le nombre de problèmes résolus, ainsi qu'un classement spécial basé sur la vitesse de résolution des derniers problèmes parus.
Depuis la création du site en 2001, plus de 1 000 000 utilisateurs se sont enregistrés sur le site[2].
Une traduction du premier problème est[Note 2] :
« Si on liste tous les entiers naturels inférieurs à 10 qui sont multiples de 3 ou de 5, on obtient 3, 5, 6 et 9. La somme de ces nombres est 23. Trouvez la somme de tous les multiples de 3 ou de 5 inférieurs à 1 000[Note 3]. »
Bien que ce problème soit l'un des plus simples du site, il permet d'illustrer le gain de temps potentiel d'un algorithme efficace[Note 4] par rapport à un algorithme naïf. L'algorithme brute-force examine chaque entier naturel inférieur à 1 000 et actualise la somme de ceux qui remplissent les critères. Cette méthode est facile à implémenter ; en pseudo-code, cela peut s'écrire :
initialiser SOMME à 0; pour n variant de 1 à 999 faire si n est un multiple de 3 ou de 5 alors // Autrement dit si n est divisible par 3 ou par 5 ajouter n à SOMME; fait; renvoyer SOMME
Cependant, pour les problèmes plus complexes, trouver un algorithme efficace devient indispensable. Pour cet exemple, nous pouvons réduire 1 000 opérations à quelques-unes en utilisant le principe d'inclusion-exclusion et une formule de sommation :
Où désigne la somme des multiples de inférieurs à et désigne l'arrondi à l'entier inférieur.
Implémentation en Python :
def sum_1_to_n(n):
return n * (n + 1) / 2
def sum_multiples(limit, a):
return sum_1_to_n((limit - 1) // a) * a
sum_multiples(1000, 3) + sum_multiples(1000, 5) - sum_multiples(1000, 15)
Grâce à cet algorithme, la solution pour une borne supérieure à 10 000 000 peut être obtenue presque aussi rapidement que pour 1 000. En notation de Landau, l'algorithme brute-force est en O(n) tandis que l'algorithme efficace est en O(1) (si on considère que le coût des opérations arithmétiques est constant).
À ce jour, il existe différentes traductions du Projet Euler (classées par ordre alphabétique) :
Langue | Lien |
---|---|
• A | |
Anglais (Langue officielle) | https://projecteuler.net |
Allemand | http://projekteuler.de/ |
• C | |
Chinois | Website 1: https://pe-cn.github.io/
Website 2: http://pe.spiritzhang.com/ |
Coréen | http://euler.synap.co.kr/ |
• F | |
Français | https://projet-euler.fr
https://web.archive.org/web/20120310103855/http://toprog.fr.nf/index.php?Page=Exercices&Section=Euler |
• P | |
Persan | https://marhale3.github.io/ |
• R | |
Roumain | http://projecteuler.radumurzea.net/ |
Russe | http://euler.jakumo.org/ |