Cet ouvrage fait partie de la bibliothèque YouScribe
Obtenez un accès à la bibliothèque pour le lire en ligne
En savoir plus

Exercices sur les nombres premiers

De
4 pages
Exercices sur les nombres premiers Les nombres premiers ont toujours fasciné les mathématiciens depuis l'antiquité. Rappelons qu'un nombre entier naturel est premier lorsqu'il ne possède pas d'autres diviseurs que 1 et lui-même. La suite des nombres premiers est infinie. Le début de cette suite est : 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 . 2.1. Écriture d'une fonction qui détermine si un entier est premier ou non Il s'agit d'écrire une fonction EstPremier(n) qui retourne la valeur VRAI si n est un entier naturel premier, FAUX si n est un entier naturel non premier. Function EstPremier(n) If n 0) k = k + 2 'k+2 est le diviseur potentiel suivant k Loop EstPremier = (k ^ 2 > n) End If End If End Function Voici l'organigramme de cette fonction, basé sur un algorithme très simple : Remarque : Si cette fonction est placée dans la feuille de code associée à une feuille de calcul alors elle ne peut être utilisée que par une procédure de cette feuille de calcul. En revanche, si cette fonction est placée dans un module alors elle peut être utilisée depuis n'importe quelle feuille de code et même directement depuis une feuille de calcul comme étant une fonction définie par l'utilisateur ... On peut dans ce cas placer dans la cellule B1 (par exemple) la formule : = EstPremier(A1). 2.2.
Voir plus Voir moins

Exercices sur les nombres premiers
Les nombres premiers ont toujours fasciné les mathématiciens depuis l'antiquité. Rappelons qu'un
nombre entier naturel est premier lorsqu'il ne possède pas d'autres diviseurs que 1 et lui-même. La
suite des nombres premiers est infinie. Le début de cette suite est : 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 .
2.1. Écriture d'une fonction qui détermine si un entier est premier ou non
Il s'agit d'écrire une fonction EstPremier(n) qui retourne la valeur VRAI si n est un entier naturel
premier, FAUX si n est un entier naturel non premier.
Function EstPremier(n)
If n < 4 Then
EstPremier = True 'Les nombres entiers inférieurs à 4 sont premiers
Else If n Mod 2 = 0 Then
EstPremier = False 'Aucun nombre pair n'est premier
Else k = 3 'On commence par essayer la division par 3 Do While (k ^ 2 <= n) And (n Mod k > 0)
k = k + 2 'k+2 est le diviseur potentiel suivant k
Loop EstPremier = (k ^ 2 > n)
End If
End If
End Function

Voici l'organigramme de cette fonction, basé sur un algorithme très simple :
Remarque : Si cette fonction est placée dans la feuille de code associée à une feuille de calcul alors
elle ne peut être utilisée que par une procédure de cette feuille de calcul. En revanche, si cette fonction
est placée dans un module alors elle peut être utilisée depuis n'importe quelle feuille de code et même
directement depuis une feuille de calcul comme étant une fonction définie par l'utilisateur ... On peut
dans ce cas placer dans la cellule B1 (par exemple) la formule : = EstPremier(A1).
2.2. Test de la fonction EstPremier
Pour tester la fonction EstPremier, écrire un programme qui remplit les cellules des 10 premières
lignes et 10 premières colonnes avec les nombres entiers de 1 à 100 et qui met la cellule sur fond
rouge lorsqu'il s'agit d'un entier premier.
Voici l'écran qu'on doit obtenir :


Pour remplir les 100 cellules avec les entiers de 1 à 100, il suffit de faire 2 boucles imbriquées l'une
dans l'autre :

:
Sub Test()
Range("A1:J10").Clear For L = 1 To 10
For C = 1 To 10
Cells(L, C) = 10 * (L - 1) + C If EstPremier(Cells(L, C)) Then Cells(L, C).Interior.ColorIndex = 3
End If
Next C
Next L
End Sub


2.3. Exercices
 Écrire une procédure qui remplit les 100 premières cellules de la colonne A par des nombres
entiers aléatoires compris entre 1 et 1000 et mettre le fond des cellules contenant un entier
premier en rouge.

La solution ne présente aucune difficulté particulière. Nous avons simplement rajouté une variable
nommée " Compteur " qui calcule au fur et à mesure du déroulement le nombre de nombres premiers

Sub CentEntiers()
Compteur = 0
Range(Cells(1, 1), Cells(100, 1)).Clear Randomize
For n = 1 To 100
Cells(n, 1) = Int(1000 * Rnd + 1) If EstPremier(Cells(n, 1)) Then
Range(Cells(n, 1), Cells(n, 1)).Interior.ColorIndex = 3 Compteur = Compteur + 1
End If
Next Cells(1, 3) = "Il y a " & Str(Compteur) & " nombres premiers parmi ces 100
entiers"
End Sub

 Écrire une procédure qui demande à l'utilisateur d'entrer un entier a, puis un entier b (b>a), puis
qui affiche, dans la colonne A, tous les nombres premiers compris entre a et b.
Pas de difficulté particulière. On notera simplement comment on peut forcer l'utilisateur à entrer un
deuxième nombre supérieur au premier (boucle Do.. loop until) :
Sub AfficherPremiers()
Range(Cells(1, 1), Cells(1000, 1)).Clear a = InputBox("Entrer un entier a", "Recherche de nombres premiers")
a = Val(a) Do
b = InputBox("Entrer un entier b " & "(supérieur à " & Str(a) & ")", _
"Recherche de nombres premiers") b = Val(b)
Loop Until b > a Compteur = 0
For n = a To b
If EstPremier(n) Then
Compteur = Compteur + 1
Cells(Compteur, 1) = n End If
Next Cells(1, 3) = "Il y a " & Str(Compteur) & " nombres premiers entre " & Str(a)
& " et " & Str(b)
End Sub


Les lignes :
a = Val(a)
b = Val(b)
sont obligatoires car, sinon, la fonction InputBox retourne une chaîne de caractères ...

Un pour Un
Permettre à tous d'accéder à la lecture
Pour chaque accès à la bibliothèque, YouScribe donne un accès à une personne dans le besoin