Calcul de nombres premiers par crible d'eratosthene

Soyez le premier à donner votre avis sur cette source.

Vue 8 950 fois - Téléchargée 324 fois

Description

Ce code calcule simplement tous les nombres premiers jusqu'à celui choisi par la méthode du crible d'ératosthène.

Jérôme MEGEL

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8 -
Euh... un petit mot sur le code tout de même...

Désolé, mais la méthode utilisée n'est pas le crible d'Erasthotène... Elle correspond à la division successive des nombres inférieurs à celui cherché...

IL me semble que dans les 2 boucles, tu gagnerais beaucoup de temps si tu testes uniquement les nombres impairs... Il suffit pour cela d'indiquer la valeur du pas "Step" dans les boucles... Par exemple :

For p = 3 To nb step 2
prem = True
fin = p^0.5
For i = 3 To fin step 2
...............

A la fin, il faudra bien rajouter 1, à nb_prem pour tenir compte de 2... Et également faire un petit test au début pour si le nombre entrée est exactement 2...

Ensuite, je souscris aux remarques de "zemetafyzik" pour les histoire de Mod...

Enfin, les boucles sont plus rapides si les variables sont déclarées avant... Ici par : "dim p as long, i as long"

Voilà, déjà quelques points d'améliorations...

Bonne poursuite,
Us.
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8 -
Salut,

"si i modulo j est congru à 0 alors il n'est pas premier . pourquoi ? comme je saispas l'expliquer ..."

C'est pourtant trés simple, il n'y a rien à comprendre !
"i modulo j est congru à 0" signifie que le reste de la division de i/j est nul. Donc i est multiple de j (et non pas : "qu'il a un multiple"... c'est plus précis...)

Si "i modulo j est congru à r" signifie que si on fait la division i/j et qu'on s'arrête à la partie entière, alors le reste vaudra "r"... si on veut continuer la division pour connaître la partie décimale, il faudra reprendre par r/j...

Rq: Pour connaître la partie entière d'une division en VB, il suffit d'utiliser la fonction Int. Par exemple, Int(i/j)...

Amicalement,
Us.
zemetafyzik
Messages postés
119
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
3 novembre 2007
1 -
je croyais que le crible etait : on affiche tout les nombre (premiere ligne de 0 a 9) ou 0 a 49 ... ainsin on a sur la deuxieme ligne de (celle de 0 a 9)
colone 1 colone 2 colone 3
0 1 2
10 11 12
20 21 22

ainsi on ray absolument toute la colone 3 (sauf le 2 bien sur :D)
toute la colone 5 .... (les paire en moin quoi)
ensuite il me semble q'avec une histoire de trois, il y avait toute une diagonale qui partait

tout sa pour dire que je pense que ta pas fais un crible d'eratosthene mais simplement mis les nombres premier dans des cases.
ensuite, pour la racine carré tu peu aussi faire sqr(p)
ensuite, quelque chose qui devrai ameliorer ton prog, enfin le rendre plus "mathematique" (parceque le coup de la recherche du "." c'est pas bete du tout !) mais il y a le modulo, il se comporte ainsi :
If (i Mod j = 0) Then
premier = False

i etant le nb premier recherché.
sa veu dire : si i modulo j est congru a 0 alors il n'est pas premier . pourquoi ?
comme je saispas l'expliquer je vai te donner un exemple
4 mod 2 = 0 car 4=2*2 + 0
5 mod 2 1 car 5 2*2 + 1
55 mod 11 = 0 car 55=11*5 + 0
59 mod 11 = 4 car 59=11*5 + 4
t'a compri ?
en gros, si c'est egale a 0 c'est quil a un multiple donc pas premier, si egale a autre chose, on s'est pas encore, donc on continu la boucle jusqua sqr(premier)

ensuite, avec ton "bidouillage" ou tu recherche le "." tu devrai plutot faire : si le nombre rechercher se termine par 0 2 4 6 8 tu vire ainsi que 5
(tu te sers de "Right(a,b)" comme c'est le dernier chiffre...)
ainsi je pense qu'il ne plentera plus a 100 000 et pourra monter bcp plus haut

bonne continuation

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.