Maths-cours

COURS & EXERCICES DE MATHÉMATIQUES

Close

Somme des chiffres et dénombrement

  1. Déterminer le nombre d'entiers naturels inférieurs à 1 000 000 dont la somme des chiffres est égale à 4.

  2. Écrire une programme en Python qui liste ces entiers et qui vérifie le résultat de la question 1.

Corrigé

  1. En préfixant un nombre par des zéros ( par exemple 301 = 000301 ), on peut considérer que les entiers naturels inférieurs à 1 000 000 sont les entiers de six chiffres.

    Pour que la somme des chiffres soit égal à 4, on a les possibilités suivantes :

    • 4 chiffres « 11 » (et 2 chiffres « 00 ») ce qui donne (64)=15 \begin{pmatrix} 6 \\ 4 \end{pmatrix} = 15 possibilités ;

    • 2 chiffres « 11 », 1 chiffre « 22 » (et 3 chiffres « 00 ») ce qui donne (62)=15 \begin{pmatrix} 6 \\ 2 \end{pmatrix} = 15 possibilités pour le chiffre « 11 » et 4 possibilités pour le chiffre « 22 » (car il ne reste plus que 4 positions une fois que les 2 chiffres « 11 » ont été placés), soit au total 15×4=60 15 \times 4 = 60 possibilités ;

    • 2 chiffres « 22 » (et 4 chiffres « 00 ») ce qui donne (62)=15 \begin{pmatrix} 6 \\ 2 \end{pmatrix} = 15 possibilités ;

    • 1 chiffre « 11 », 1 chiffre « 33 » (et 4 chiffres « 00 ») ce qui donne 6×5=30 6 \times 5 = 30 possibilités ;

    • 1 chiffre « 44 » (et 5 chiffres « 00 ») ce qui donne 6 possibilités .

      Au total, le nombre d'entiers naturels inférieurs à 1 000 000 dont la somme des chiffres est égale à 4 est ;

      15+60+15+30+6=126. 15 + 60 + 15 + 30 + 6= 126.

      Remarque  : On peut retrouver ce résultat en utilisant l'exercice Combinaisons avec répétition ; on est en effet amené à chercher les solutions entières et positives de l'équation x+y+z+t+u+v=4 x+y+z+t+u+v = 4 qui d'après cet exercice est : (94)=126. \begin{pmatrix} 9 \\ 4 \end{pmatrix} = 126.

  2. Voici un exemple de programme Python assez simple qui répond au problème en bouclant sur les six chiffres :

    compteur = 0
    for i_1 in range(0,5) :
        for i_2 in range(0,5) :
            for i_3 in range(0,5) :
                for i_4 in range(0,5) :
                    for i_5 in range(0,5) :
                        for i_6 in range(0,5) :
                            if ( i_1 + i_2 + i_3 + i_4 + i_5 + i_6 == 4) :
                                compteur = compteur + 1
    print('total : ', compteur)

    Aucun chiffre ne pouvant être strictement supérieur à 4, on a limité les boucles à un range(0, 5) pour optimiser le programme (il est possible d'optimiser davantage mais on obtient alors un programme plus complexe).