LUCAS WILLEMS
Un étudiant de 27 ans passionné par les maths et la programmation
Un étudiant de 27 ans passionné par les maths et la programmation
Voici un résumé de l'énoncé du problème 9 "Special Pythagorean triplet" du Project Euler (traduction complète en français ici) :
Find the product abc for which there exists exactly one Pythagorean triplet for which \(a+b+c=1000\).
Reformulons le problème : il nous faut trouver le produit \(a \times b \times c\) d'une triplette Pythagorienne, c'est à dire le produit des 3 longueurs des côtés d'un triangle rectangle, avec \(a+b+c=1000\).
Je pense que vous avez une petite idée de comment résoudre le problème : il va nous falloir faire varier les valeurs de a, b et c tant que \(a+b+c \ne 1000\) ou \(a^2+b^2 \ne c^2\). Nous savons aussi, grâce à l'énoncé, que \(a<b<c\).
Toutefois, cet aperçu de la solution n'est pas encore suffisant, il nous faut réfléchir sur comment "faire varier les valeurs de a, b et c" car faut-il faire varier les 3 valeurs ? et sur quel intervalle ? Pour répondre à la première question, nous n'avons pas besoin de faire varier les 3 valeurs, en faire varier 2 suffit car si nous connaissons, par exemple, la valeur de c et b, nous pouvons en déduire celle de a en résolvant l'équation vue plus haut \(a+b+c=1000\). En ce qui concerne l'intervalle, comme nous savons aussi que \(a<b<c\), nous pouvons en déduire que \(335 \le c\), \(334 \le b\) et que \(331 \le a\). La réponse à ces 2 questions nous donne maintenant un aperçu satisfaisant de la façon de résoudre ce problème.
Voici le programme Python que l'on obtient pour résoudre le problème si nous suivons les réflexions précédentes :
c = 335 b = 334 a = 1000 - c - b while a + b + c != 1000 or a**2 + b**2 != c**2: if a > b or b == 2: c += 1 b = c - 1 b -= 1 a = 1000 - c - b print(a*b*c)
Comme toutes les explications ont été données plus haut, je ne pense pas avoir besoin d'ajouter des commentaires sur ce code.
La réponse à ce problème est 31875000.
Voici les recherches relatives à cette page :
Qu'en pensez-vous ? Donnez moi votre avis (positif ou négatif) pour que je puisse l'améliorer.