Cliquez pour afficher
import itertools
premiers = [2,3,5,7,11,13,17,19]
somme = 30
g = filter(lambda x: sum(x) == somme, itertools.product(premiers, repeat=3))
print(len(set(g)))
ça fait 6 solutions
Cliquez pour afficher
print(len({u for u in __import__("itertools").product([2,3,5,7,11,13,17,19],repeat=3)if sum(u)==30}))
Cliquez pour afficher 30 est pair donc impossible d'avoir trois impairs comme solution.
C'est forcément
- soit trois pairs (impossible car 3*2 = 6 != 30)
- soit un pair (donc 2) et deux impairs, ce qui nous ramène à x + y = 28.
On suppose sans perte de généralité que x < y et on élimine ce qui peut l'être : pour 3, 5, et 7 c'est mort d'avance parce qu'il faudrait y = 25, y = 23, et y = 21 respectivedment et c'est soit pas des premiers, soit hors-limite
Pour 19 c'est mort aussi parce que 28-19 n'est pas premier.
28-13 = 15 c'est foutu aussi car pas premier.
reste donc que 11 et 17, et il se trouve que 11+17 = 28. Voilà donc notre unique solution à l'ordre près. Il y a 3! = 6 façons d'ordonner 2,11, et 17.
Et la liste des solutions est
(2,11,17)
(2,17,11)
(11,2,17)
(11,17,2)
(17,2,11)
(17,11,2)