Algorithme de recherche des diviseurs d'un entier en langage naturel 1 : s ← √n
2 : i ← 1
3 : Tant que i ≤ s
4 : Si le reste de la division euclidienne de n par i est nul alors 5 : afficher i
6 : afficher n/i 7 : i ← i+1
8 : Fin du si 9 : Fin tant que
1) Programmer cet algorithme avec mu editor et corriger l'erreur qui s'est glissé.
On créera pour cela une fonction (c'est à dire une def) que l'on appellera liste_diviseur A noter : La condition du if de la ligne 4 peut se traduire par : int(n/i)==n/i
2) Louis, perfectionniste a remplacé la ligne 6 par l'instruction : Si n/i est différent de i alors
afficher n/i
Expliquer pourquoi ?
3) a) Modifier cet algorithme afin qu'il affiche le nombre de diviseurs de l'entier n On appellera c la variable qui compte le nombre de diviseur de n
b) Que peut-on en déduire sur n si on trouve c = 2 ?
4) Toujours perfectionniste, Louis décide d'obtenir cette liste de diviseurs dans l'ordre croissant . En vous renseignant sur les listes en langage python, écrire une fonction en langage python
qui renvoie la liste des diviseurs dans l'ordre croissant
5) Définition : « Un nombre parfait est un entier naturel qui est égal à la somme de ses diviseurs propres ( ie : ses diviseurs différents de lui-même) » 6 est parfait car 1+2+3=6
a) Ecrire une fonction en langage python permettant de savoir si un nombre est parfait ou non (on pourra utiliser la fonction précédente)
b) Programmer cet algorithme et déterminer les nombres parfaits inférieurs à 30 ? c) Combien y a-t-il de nombres parfaits inférieurs inférieurs à 20 000 ?
sanstitre - 12.08.2018
1 VARIABLES
2 s EST_DU_TYPE NOMBRE 3 i EST_DU_TYPE NOMBRE 4 n EST_DU_TYPE NOMBRE 5 r EST_DU_TYPE NOMBRE 6 sdd EST_DU_TYPE NOMBRE 7 d EST_DU_TYPE NOMBRE 8 DEBUT_ALGORITHME
9 n PREND_LA_VALEUR 1 10 d PREND_LA_VALEUR 0 11 TANT_QUE (n<=500) FAIRE 12 DEBUT_TANT_QUE
13 s PREND_LA_VALEUR sqrt(n) 14 i PREND_LA_VALEUR 1
15 sdd PREND_LA_VALEUR 0 16 TANT_QUE (i<=s) FAIRE 17 DEBUT_TANT_QUE
18 SI (n/i==floor(n/i)) ALORS 19 DEBUT_SI
20 sdd PREND_LA_VALEUR sdd+i 21 SI (n/i!=i) ALORS
22 DEBUT_SI
23 r PREND_LA_VALEUR n/i 24 sdd PREND_LA_VALEUR sdd+r 25 FIN_SI
26 FIN_SI
27 i PREND_LA_VALEUR i+1 28 FIN_TANT_QUE
29 sdd PREND_LA_VALEUR sdd-n 30 SI (sdd==n) ALORS
31 DEBUT_SI
32 d PREND_LA_VALEUR d+1 33 FIN_SI
34 n PREND_LA_VALEUR n+1 35 FIN_TANT_QUE
36 AFFICHER "nombre de nombres parfaits inférieurs à "
37 n PREND_LA_VALEUR n-1 38 AFFICHER n
39 AFFICHER d
40 FIN_ALGORITHME