Combinaisons possibles de 5 numeros de 1 à 50

Résolu
PrivatD -  
 PrivatD -

Bonjour,

J'aimerais tester une idée qui me taraude depuis un certain temps.

Il s'agit du Euromillions, vous l'aurez deviné.

J'aimerais obtenir de l'aide pour lister sous excel toutes les combinaisons possibles de 5 numéros de 1 à 50.

Toute aide sera appréciée

5 réponses

  1. Pierr10 Messages postés 13819 Date d'inscription   Statut Modérateur Dernière intervention   5 835
     

    Bonjour,

    C'est effectivement une combinaison au sens mathématique du terme.
    Le nombre de ces combinaisons est (50*49*48*47*46)/(5*4*3*2), ce qui fait :
    2 118 760 combinaisons possibles.

    Il va falloir beaucoup de lignes dans votre tableau Excel !


    1
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     

    Bonjour,

    La question que tout le monde peut naturellement se poser, c'est quel est l'intérêt de lister toutes les combinaisons. Par exemple, si le but est de stocker toutes les combinaisons qui ont déjà eu lieu, il est inutile de toutes les énumérer, seules celles qui ont eu lieu sont pertinentes.

    En effet, du point de vue des mathématiques, ce n'est pas parce qu'une combinaison a déjà été réalisée qu'elle a plus ou moins de chance de se réaliser à l'avenir. On parle de tirages indépendants. En d'autres termes, maintenir de telles statistiques n'a pas de réel intérêt pratique.

    Énumération

    Si tu veux malgré tout énumérer toutes ces combinaisons, comme souligné par les nombreuses personnes qui sont déjà intervenues, Excel est assez inadapté pour manipuler de tels volumes de données. Un langage comme python serait bien plus pratique, comme le montre l'exemple ci-dessous.

    from itertools import combinations
    from pprint import pprint
    
    k = 5   # Longueur des combinaisons
    n = 50  # Valeur maximum des nombres impliqués dans les combinaisons
    
    c = list(combinations(list(range(1, n + 1)), k))
    print(len(c))  # Affiche le nombre de combinaisons
    pprint(c[:10])  # Affiche les 10 premières combinaisons

    Résultat :

    2118760
    [(1, 2, 3, 4, 5),
     (1, 2, 3, 4, 6),
     (1, 2, 3, 4, 7),
     (1, 2, 3, 4, 8),
     (1, 2, 3, 4, 9),
     (1, 2, 3, 4, 10),
     (1, 2, 3, 4, 11),
     (1, 2, 3, 4, 12),
     (1, 2, 3, 4, 13),
     (1, 2, 3, 4, 14)]

    Dénombrement

    Dans le cas de l'euro millions, le tirage est fait sans remise et on ne s'intéresse donc qu'aux combinaisons sans répétitions, dont le nombre est obtenu par cette formule (voir ici) :

    K(n, k) = n! / (k! * (n - k)!)

    avec :

    • ! est l'opérateur factorielle;
    • n = 50 (puisqu'on a le choix parmi 50 nombres distincts);
    • k = 5 (puisque chaque combinaison est composée de 5 nombres)

    ... ce qui donne bien le même résultat que ce que Pierr10 a calculé dans le message #1.

    En python :

    from math import factorial
     
    def nc(n, k):
        return factorial(n) // (factorial(k) * factorial(n - k))
    
    print(nc(50, 5))  # Affiche 2118760

    ... ou plus simplement :

    from math import comb
    
    print(comb(50, 5))

    Bonne chance

    1
    1. PrivatD
       

      Je vous remercie 

      0
  3. PrivatD
     

    En effet oui. Mais maintenant comment lister cela! Telle est la question!

    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. brucine Messages postés 24735 Date d'inscription   Statut Membre Dernière intervention   4 154
     

    Bonjour,

    La question n'a absolument aucun intérêt, comme le souligne Pierr10, on va planter Excel et son PC à vouloir générer et afficher cette liste qui de toute façon ne pourra pas être consultée aisément ni servir de base de données facilement exploitable pour un traitement numérique du fait de sa taille.

    Elle serait plus "naturellement" traitée par un langage de programmation mais toujours dès lors que le résultat attendu est faible (ce qui, en matière de factorielles, reste assez théorique), on la trouve par exemple traitée ici en Python ou ici dans d'autres langages.

    Si on tient vraiment à Excel, rien n'est plus indispensable que ce qui est inutile, il existe différentes approches en VBA comme ici ou sans comme .

    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      bonjour, puisqu'il faut trouver 5 nombres, il me semble beaucoup plus simple et plus rapide de travailler avec 5 boucles imbriquées.

      Option Explicit
      
      Private Sub cc()
      Dim i1 As Integer, i2 As Integer, i3 As Integer, i4 As Integer, i5 As Integer
      Dim c As Long, n As Integer
      Dim r As Long, col As Integer
      c = 0
      n = 50
      r = 2
      col = 1
      Debug.Print Now, n
      For i1 = 1 To n
          For i2 = i1 + 1 To n
              For i3 = i2 + 1 To n
                  For i4 = i3 + 1 To n
                      For i5 = i4 + 1 To n
                          c = c + 1
                          Cells(r, col) = i1
                          Cells(r, col + 1) = i2
                          Cells(r, col + 2) = i3
                          Cells(r, col + 3) = i4
                          Cells(r, col + 4) = i5
                          col = col + 6
                          If col = 25 Then
                              col = 1
                              r = r + 1
                          End If
                      Next i5
                  Next i4
              Next i3
          Next i2
      Next i1
      Debug.Print Now, c
      End Sub
      
      1
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         

        Bonjour Il faut penser qu'il faut trouver les combinaisons sans doublon. Et sans retirage. Par exemple : 1,2,3,4,5. Est pareil que 5,3,4,2,1

        2
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         

        Oui, heureusement, on n'est pas obligé d'utiliser des constantes comme bornes de boucle.

        0
      3. PrivatD > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         

        Merci je prends note

        1