NGUYENTRITHIEN
Messages postés1Date d'inscriptionlundi 23 juillet 2007StatutMembreDernière intervention23 juillet 2007
-
23 juil. 2007 à 11:11
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 2019
-
23 juil. 2007 à 12:15
Veuillez trouver ci-dessous le code source pour avis. C'est une macro qui capte la valeur de :
* -di (entier positif de départ ) dans la cellule B1 de la feuille 1 de calcul
* -dn (nombre de nombres premiers dans la cellule B2 de la feuille 1 de calculésirés supérieur à di)
* -nc (nombre de nombres premiers/ligne pour la sortie des résultats)
La zone réservée aux résultats est (E1 : IV65536)
Sub MathieuNguyen()
'
' MathieuNguyen Macro
' Dn nombre premier sup à di enregistrée le 17/07/2007 par MATHIEU Philippe avec
' une contribution de M.NGUYEN Tri-Thiên Medad/Daei/mission normalisation
'***********************************************************************************
'Début des initialisations et de nettoyage de la zone de travail
Sheets(1).Select 'indication au macro que nous sommes sur la feuille 1 du tableur
di = Range("B1") 'nombre entier de départ
dn = Range("B2") 'nombre de nombres premiers désiré
nc = Range("B3") 'nombre de nombres premiers / ligne pour la sortie des résultats
Range("E1:IV65536").ClearContents 'nettoyage de zone de sortie des résultats
'Fin des initialisations et de nettoyage de la zone de travail
'***********************************************************************************
'===================================================================================
'Début du processus de présentation de tous les nombres entiers 1 à 1 à partir de di
'pour tester s'il est premier ou non jusqu'à l'obtention des dn nombres premiers
'-----------------------------------------------------------------------------------
'Début des initialisations de la boucle de présentation des nombres entiers 1 à 1
u = 0 'u est l'indice ou le compteur des nombres premiers obtenus
n = di - 1 'n est l'indice du nombre entier à présenter au test
'Fin des initialisations de la boucle de présentation des nombres entiers 1 à 1
'-----------------------------------------------------------------------------------
'Début de la boucle de présentation des nombres entiers 1 à 1
'Cette boucle" While" ou "tant que" ne s'arrête qu'au dnième nombre premier obtenu
While u < dn 'la boucle While nous dispense de fixer le nombre maxi d'itération
P = n + 1 'introduction du nombre entier P à tester
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'Début du test si P est entier ou non
'Le test se fait en divisant P par tous les nombres entiers compris entre 2 et P-1
'si tous les restes de ces divisions sont différents de 0, P est un nombre premier
'ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
'Début des initialisations de la boucle testant P
j = 2 'j est l'entier diviseur de P
reste = 1 'pour permettre à la boucle de démarrer, reste doit être > 0
'Fin des initialisations de la boucle testant P
'ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
'Début de la boucle testant l'existence ou non d'un diviseur de P compris entre 2 et
While j <= n And reste > o 'P-1, l'itération s'arrête dès qu'on en trouve un
reste = P Mod j 'Mod donne le reste de la division des entiers P par j
j = j + 1 'Passage à l'entier suivant avant la division
Wend
'Fin de la boucle testant l'existence ou non d'un diviseur de P
'Fin du test si P est entier ou non
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'A la sortie de cette boucle si j=P-1
If j = P Then 'si P est un nombre premier
u = u + 1 'mise à jour du compteur ou de l'indice
'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
If u < nc + 1 Then 'début du calcul l'adresse de la cellule de sortie
lig = 1 'cas particulier de la première ligne
col = u
Else
If u = (nc + 1) Then 'cas particulier du 1er élément de la 2ème ligne
lig = 2
col = 1
Else
q = Fix((u - 1) / nc) 'sortie standard à partir de la 3ème ligne
lig = q + 1 'sortie standard
col = ((u - 1) Mod nc) + 1 'sortie standard
End If 'fin du calcul l'adresse de la cellule de sortie
'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
End If
Cells(lig, (col + 4)) = P
End If
n = n + 1
Wend
'Fin de la boucle de présentation des nombres entiers 1 à 1
'-----------------------------------------------------------------------------------
End Sub