OVH Cloud OVH Cloud

Nombres premiers...

15 réponses
Avatar
Toine
Bonjour,

Lors d'un entretien d'embauche, on m'a demandé d'écrire un algorithme
permettant de trouver les 100 premiers nombres premiers... et à ma grande
honte, je n'ai pas su le faire.
Et même à tête reposée, je n'y arrive pas, alors je sollicite votre aide.
Attention, je parle d'un truc simple, pas de se servir de fonctions
mathématiques permettant d'optimiser la recherche de nombres premiers
supérieurs à X^12. Ca, j'en ai trouvé plein sur le net, mais àa m'a pas
beaucoup avancé :)

Question subsidaire: sur quel forum poster ce genre de questions ? J'ai
posté ici parceque je dois écrire le programme en VB, mais je suppose qu'il
y'a un forum plus approprié.

Merci d'avance pour vos lumières

5 réponses

1 2
Avatar
Pascal
Pascal wrote:

Ba c'est pas très dur. En quelque ligne, suffit juste de se rappeler
qu'un nombre premier n'est divisible que par lui même et un. Commencer à
partir de 2 (un n'est pas premier...) pour être rigoureux. Après il
existe déjà de nombreux algorithmes, mais le plus simple reste celui la.
X : nb a trouver
i, j: deux var

x = 2
Tant que X <100 faire
pour i = 2 to X-1 faire
si x div i = 0 print X
next i
x=x+1
fin tant que




Quel bille! plutot ça :
X : nb a trouver
i : var
bool

x = 2
Tant que X <100 faire
bool = false
pour i = 2 to X-1 faire
si x div i = 0 alors bool = true
next i
si !bool alors print X & "est premier"
x=x+1
fin tant que
--
Pascal
Avatar
Driss HANIB
Bonjour moi je ferai plutot
Dim Premier as booléen

For X = 3 to 100 step 2 ' car il est inutile de chercher dans les nombres
pairs ..
Pour I = 2 to Int(X/2) ' car on sait que les diviseurs s'ils existent
seront "symétriques"
if X mod I = 0 alors
premier est faux
sortir boucle
sinon
premier est vrai
fin si
next I
si premier est vrai alors
imprimer X
fin si
Next X

Driss


"Pascal" a écrit dans le message de
news:4141b926$0$32457$
Pascal wrote:
>
> Ba c'est pas très dur. En quelque ligne, suffit juste de se rappeler
> qu'un nombre premier n'est divisible que par lui même et un. Commencer à
> partir de 2 (un n'est pas premier...) pour être rigoureux. Après il
> existe déjà de nombreux algorithmes, mais le plus simple reste celui la.
> X : nb a trouver
> i, j: deux var
>
> x = 2
> Tant que X <100 faire
> pour i = 2 to X-1 faire
> si x div i = 0 print X
> next i
> x=x+1
> fin tant que
>

Quel bille! plutot ça :
X : nb a trouver
i : var
bool

x = 2
Tant que X <100 faire
bool = false
pour i = 2 to X-1 faire
si x div i = 0 alors bool = true
next i
si !bool alors print X & "est premier"
x=x+1
fin tant que
--
Pascal


Avatar
Pascal
Driss HANIB wrote:
Bonjour moi je ferai plutot
Dim Premier as booléen

For X = 3 to 100 step 2 ' car il est inutile de chercher dans les nombres
pairs ..



X devrait commencé à 2 pour deux raisons :
- moi je comprends l'énoncé comme écrire un algorithme permettant de
trouver les nb premiers. Pour moi il faut donc commencer immédiatement
après 1, vu que lui est un cas particulier. Après si on demande une
optimiisation, on peut effectivement commencé à 3 et faire un pas de 2,
etc...
- 2 est premier, et là tu l'oublies.

Pour I = 2 to Int(X/2) ' car on sait que les diviseurs s'ils existent
seront "symétriques"



Normalement c'esr racine carré qu'il faut prendre. Ca marche aussi avec
Int(X/2) car Int(X/2) > sqrt(X)


if X mod I = 0 alors
premier est faux
sortir boucle
sinon
premier est vrai
fin si
next I
si premier est vrai alors
imprimer X
fin si
Next X

Driss




En enlevant ta condition sinon, ton algo pourrait être plus rapide.
--
Pascal
Avatar
Driss HANIB
Salut pascal,

tu as raison

pour 2 c'est vrai je le comptais d'office comme rpemier mais rigoureusement
il faut le mettre.
ensuite ma langue a fourché et effectivment je pensais racine carrée

comme quoi en écrivant trop vite une réponse on arrive à un dérapage fatal
.lol

Driss
"Pascal" a écrit dans le message de
news:4142cfb2$0$32632$
Driss HANIB wrote:
> Bonjour moi je ferai plutot
> Dim Premier as booléen
>
> For X = 3 to 100 step 2 ' car il est inutile de chercher dans les


nombres
> pairs ..

X devrait commencé à 2 pour deux raisons :
- moi je comprends l'énoncé comme écrire un algorithme permettant de
trouver les nb premiers. Pour moi il faut donc commencer immédiatement
après 1, vu que lui est un cas particulier. Après si on demande une
optimiisation, on peut effectivement commencé à 3 et faire un pas de 2,
etc...
- 2 est premier, et là tu l'oublies.

> Pour I = 2 to Int(X/2) ' car on sait que les diviseurs s'ils


existent
> seront "symétriques"

Normalement c'esr racine carré qu'il faut prendre. Ca marche aussi avec
Int(X/2) car Int(X/2) > sqrt(X)


> if X mod I = 0 alors
> premier est faux
> sortir boucle
> sinon
> premier est vrai
> fin si
> next I
> si premier est vrai alors
> imprimer X
> fin si
> Next X
>
> Driss


En enlevant ta condition sinon, ton algo pourrait être plus rapide.
--
Pascal


Avatar
yasminebek
Le mercredi 25 Août 2004 à 17:55 par Toine :
Bonjour,

Lors d'un entretien d'embauche, on m'a demandé d'écrire un
algorithme
permettant de trouver les 100 premiers nombres premiers... et à ma
grande
honte, je n'ai pas su le faire.
Et même à tête reposée, je n'y arrive pas, alors je
sollicite votre aide.
Attention, je parle d'un truc simple, pas de se servir de fonctions
mathématiques permettant d'optimiser la recherche de nombres premiers
supérieurs à X^12. Ca, j'en ai trouvé plein sur le net,
mais àa m'a pas
beaucoup avancé :)

Question subsidaire: sur quel forum poster ce genre de questions ? J'ai
posté ici parceque je dois écrire le programme en VB, mais je
suppose qu'il
y'a un forum plus approprié.

Merci d'avance pour vos lumières


svp jai besoin d'un algorithme des nombres pairs et impairs en langage VB
1 2