|
Édition du: 12/08/2025 |
|
INDEX |
Défis arithmétiques |
|||
Faites un double-clic pour un retour en haut de page
![]()
|
Défi: nombre divisible par k
Trouver les
nombres sous contrainte de divisibilité et de somme des chiffres. On ajoute
que les nombres sont à trois chiffres distincts. Exemple avec divisibilité
par k = 3 et somme S = 18 |
||
|
|
Sommaire de cette page >>> Somme des chiffres: S = 18 >>> Programmation – Trois possibilités >>> Nombres primaires avec S =18 >>> Liste des nombres primaires >>> Sommes – Programmation Python |
Débutants Glossaire |
|
Défi Ce
défi est posé sur Internet, Facebook, etc. Il
est amusant et accessible à des élèves
de primaire. Il
demande de trouver tous les nombres divisibles par 3, à trois chiffres
distincts de somme 18. |
Remarque Cependant,
sa définition est redondante: un nombre dont la somme des nombres est 18 est
toujours divisible par 3, car la somme est elle-même divisible par 3. |
||
|
Liste des nombres de 1 à 1000 avec S = 18 Il
y en a 55 |
99, 189,
198, 279, 288, 297, 369, 378, 387, 396, 459, 468, 477, 486, 495, 549, 558,
567, 576, 585, 594, 639, 648, 657, 666, 675, 684, 693, 729, 738, 747, 756,
765, 774, 783, 792, 819, 828, 837, 846, 855, 864, 873, 882, 891, 909, 918,
927, 936, 945, 954, 963, 972, 981, 990. |
||
|
Programme avec ensemble S = set() for n in range(1, 1000): sc = sum(int(d) for d in str(n)) if sc == 18: S.add(n) print(len(S),sorted(S)) |
Commentaires Déclaration
d'un ensemble S. Dans
la boucle calcul de la somme des chiffres en passant par un épluchage de la chaine
de caractère (str). Si
la somme vaut 18, le nombre n est ajouté à l'ensemble (add). On
imprime la liste après l'avoir triée (sorted). |
|
|
Programme avec liste L = [] for n in range(100, 1000): if sum(int(d) for d \ in str(n)) == 18: L.append(n) print(len(L),sorted(set(L))) |
Commentaires Déclaration
d'une liste L. Ajouter
un élément à une liste de fait avec append
(et non plus add). |
|
|
Programme avec liste triée tout le long du traitement from bisect import insort L = [] for n in range(100, 1000): if sum(int(d) for d \ in str(n)) == 18: insort(L, n) print(L) |
Commentaires L'instruction
insort
insère l'élément à la bonne position pour que
la liste reste triée tout le log du calcul. |
|
Voir Programmation – Index / Programmes Python – Index
|
But Reprendre
la liste des nombres dont la somme des chiffres est 18 en ne conservant qu'un
seul représentant des nombres identiques par permutations de chiffres. On
élimine tous les nombres comportant un zéro, car ceux-ci peuvent être ajoutés
ad infinitum. |
On
ne conserve que le "primaire" 189 pour représenter les nombres: Le
nombre 99 étant retenu, les nombre 990 ou 909 seront éliminés. |
||
|
Liste des nombres primaires de 1 à 1000 avec S = 18 Il
y en a 12 dont 7 à chiffres distincts |
Complète 99, 189,
279, 288, 369, 378, 459, 468, 477, 558, 567, 666. Avec chiffres distincts 189, 279, 369,
378, 459, 468, 567. |
||
|
Liste pour 1 à 20 000 Il
y en a 71 |
99, 189, 279, 288,
369, 378, 459, 468, 477, 558, 567, 666,
1179, 1188,
1269, 1278, 1359, 1368, 1377, 1449, 1458, 1467, 1557,
1566, 2259, 2268,
2277, 2349, 2358, 2367, 2448, 2457, 2466,
2556, 3339,
3348, 3357,
3366, 3447,
3456, 3555, 4446, 4455, 11169, 11178, 11259,
11268, 11277, 11349, 11358, 11367, 11448, 11457, 11466, 11556, 12249, 12258,
12267, 12339, 12348, 12357, 12366, 12447,
12456, 12555, 13338, 13347, 13356, 13446, 13455, 14445. |
||
|
TOUS Il
y en a 21 nombres primaires à chiffres distincts dont la somme est 18 (zéro exclu) |
189, 279,
369, 378, 459, 468, 567, 1269, 1278, 1359, 1368, 1458, 1467, 2349, 2358,
2367, 2457, 3456, 12348, 12357, 12456 |
||
Liste des nombres primaires à chiffres
distincts dont la somme est 1 à 35 (max)
|
1
1 [1] Somme S Quantité de nombres Liste des nombres 2
1 [2] 3
2 [3, 12] 4
2 [4, 13] 5
3 [5, 14, 23] 6
4 [6, 15, 24, 123] 7
5 [7, 16, 25, 34, 124] 8
6 [8, 17, 26, 35, 125, 134] 9
8 [9, 18, 27, 36, 45, 126, 135, 234] 10
9 [19, 28, 37, 46, 127, 136, 145, 235, 1234] 11
10 [29, 38, 47, 56, 128, 137, 146, 236, 245, 1235] 12
12 [39, 48, 57, 129, 138, 147, 156, 237, 246, 345, 1236, 1245] 13
13 [49, 58, 67, 139, 148, 157, 238, 247, 256, 346, 1237, 1246, 1345] 14
15 [59, 68, 149, 158, 167, 239, 248, 257, 347, 356, 1238, 1247, 1256, 1346,
2345] 15
17 [69, 78, 159, 168, 249, 258, 267, 348, 357, 456, 1239, 1248, 1257, 1347,
1356, 2346, 12345] 16
18 [79, 169, 178, 259, 268, 349, 358, 367, 457, 1249, 1258, 1267, 1348, 1357,
1456, 2347, 2356, 12346] 17
19 [89, 179, 269, 278, 359, 368, 458, 467, 1259, 1268, 1349, 1358, 1367,
1457, 2348, 2357, 2456, 12347, 12356] 18
21 [189, 279, 369, 378, 459, 468, 567, 1269, 1278, 1359, 1368, 1458, 1467,
2349, 2358, 2367, 2457, 3456, 12348, 12357, 12456] 19
21 [289, 379, 469, 478, 568, 1279, 1369, 1378, 1459, 1468, 1567, 2359, 2368,
2458, 2467, 3457, 12349, 12358, 12367, 12457, 13456] 20
22 [389, 479, 569, 578, 1289, 1379, 1469, 1478, 1568, 2369, 2378, 2459, 2468,
2567, 3458, 3467, 12359, 12368, 12458, 12467, 13457, 23456] 21
22 [489, 579, 678, 1389, 1479, 1569, 1578, 2379, 2469, 2478, 2568, 3459,
3468, 3567, 12369, 12378, 12459, 12468, 12567, 13458, 13467, 23457] 22 22 [589, 679, 1489, 1579, 1678,
2389, 2479, 2569, 2578, 3469, 3478, 3568, 4567, 12379, 12469, 12478, 12568,
13459, 13468, 13567, 23458, 23467] 23
21 [689, 1589, 1679, 2489, 2579, 2678, 3479, 3569, 3578, 4568, 12389, 12479,
12569, 12578, 13469, 13478, 13568, 14567, 23459, 23468, 23567] 24
20 [789, 1689, 2589, 2679, 3489, 3579, 3678, 4569, 4578, 12489, 12579, 12678,
13479, 13569, 13578, 14568, 23469, 23478, 23568, 24567] 25
18 [1789, 2689, 3589, 3679, 4579, 4678, 12589, 12679, 13489, 13579, 13678,
14569, 14578, 23479, 23569, 23578, 24568, 34567] 26
16 [2789, 3689, 4589, 4679, 5678, 12689, 13589, 13679, 14579, 14678, 23489,
23579, 23678, 24569, 24578, 34568] 27
14 [3789, 4689, 5679, 12789, 13689, 14589, 14679, 15678, 23589, 23679, 24579,
24678, 34569, 34578] 28
11 [4789, 5689, 13789, 14689, 15679, 23689, 24589, 24679, 25678, 34579,
34678] 29
9 [5789, 14789, 15689, 23789, 24689, 25679, 34589, 34679, 35678] 30
7 [6789, 15789, 24789, 25689, 34689, 35679, 45678] 31
5 [16789, 25789, 34789, 35689, 45679] 32
3 [26789, 35789, 45689] 33
2 [36789, 45789] 34
1 [46789] 35 1 [56789] |
|
def VAL(deb: int, fin: int, S: int) -> list[int]:
valides = []
for n in range(deb, fin + 1):
chiffres = str(n)
if '0' in chiffres: continue
if len(set(chiffres)) != len(chiffres): continue
if sum(int(c) for c in chiffres)== S: valides.append(n)
return valides def PRIM(nombres: list[int]) -> list[int]:
reps = {}
for n in nombres:
signature = tuple(sorted(str(n)))
if signature not in reps \ or n < reps[signature]: reps[signature] = n
return sorted(reps.values()) # Programme principal deb = 1; fin = 10000 for S in range (1,35):
tous = VAL(deb, fin, S)
uniques = PRIM(tous)
print(S, len(uniques),uniques) |
But Le
programme retourne les nombres de deb à fin tels que:
Commentaires La fonction
VAL effectue cette recherche de nombres: On passe à
la suite si le nombre comporte un "0", Les chiffres
sont différents s'il y a la même quantité de chiffres dans la liste et dans
l'ensemble. On ne
conserve que le nombre à somme de chiffres S. La
fonction PRIM ne conserve que le plus
petit représentant du groupe de permutations des chiffres d'un nombre. Le
programme principal établit les listes des nombres pour les sommes successives
de 1 à 35 (35 étant le maximum). Le résultat
est le tableau montré ci-dessus. |
|
Haut de page (ou
double-clic)
![]()
|
Retour |
|
|
Suite |
|
|
Voir |
|
|
Cette page |