Somme des chiffres et dénombrement
- Déterminer le nombre d'entiers naturels inférieurs à 1 000 000 dont la somme des chiffres est égale à 4.
- Écrire une programme en Python qui liste ces entiers et qui vérifie le résultat de la question 1.
Corrigé
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 « $ 1 $ » (et 2 chiffres « $ 0 $ ») ce qui donne $ \begin{pmatrix} 6 \\ 4 \end{pmatrix} = 15 $ possibilités ;
- 2 chiffres « $ 1 $ », 1 chiffre « $ 2 $ » (et 3 chiffres « $ 0 $ ») ce qui donne $ \begin{pmatrix} 6 \\ 2 \end{pmatrix} = 15 $ possibilités pour le chiffre « $ 1 $ » et 4 possibilités pour le chiffre « $ 2 $ » (car il ne reste plus que 4 positions une fois que les 2 chiffres « $ 1 $ » ont été placés), soit au total $ 15 \times 4 = 60 $ possibilités ;
- 2 chiffres « $ 2 $ » (et 4 chiffres « $ 0 $ ») ce qui donne $ \begin{pmatrix} 6 \\ 2 \end{pmatrix} = 15 $ possibilités ;
- 1 chiffre « $ 1 $ », 1 chiffre « $ 3 $ » (et 4 chiffres « $ 0 $ ») ce qui donne $ 6 \times 5 = 30 $ possibilités ;
1 chiffre « $ 4 $ » (et 5 chiffres « $ 0 $ ») 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. $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 $ qui d'après cet exercice est : $ \begin{pmatrix} 9 \\ 4 \end{pmatrix} = 126. $
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).