Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1201 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Algorithme nombres premiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Algorithme nombres premiers

n°1064010
atmakefka
Posté le 28-04-2005 à 11:13:31  profilanswer
 

Bonjour,
j'aurai besoin qu'on m'aide a écrire un algorithme qui affiche les 10 premiers nombres premiers
 
Merci !

mood
Publicité
Posté le 28-04-2005 à 11:13:31  profilanswer
 

n°1064089
Tamahome
⭐⭐⭐⭐⭐
Posté le 28-04-2005 à 11:59:33  profilanswer
 

http://membres.lycos.fr/villeminge [...] troduc.htm
 
Edit:  en particulier http://membres.lycos.fr/villeminge [...] atoprg.htm


Message édité par Tamahome le 28-04-2005 à 12:00:28

---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1064114
atmakefka
Posté le 28-04-2005 à 12:18:40  profilanswer
 

merci :)

n°1068481
atmakefka
Posté le 02-05-2005 à 10:34:22  profilanswer
 

En fait je n'ai tjrs pas réussi
 
Je dois ecrire un programme qui affiche les 10 premiers nombres premiers parmis les nombres d'une liste, qui les trouve dans la liste
 
 :??:  
 
help.. :(

n°1068492
skeye
Posté le 02-05-2005 à 10:45:38  profilanswer
 

atmakefka a écrit :

En fait je n'ai tjrs pas réussi
 
Je dois ecrire un programme qui affiche les 10 premiers nombres premiers parmis les nombres d'une liste, qui les trouve dans la liste
 
 :??:  
 
help.. :(


 
on est pas là pour faire tes devoirs.
Montre ce que tu as fait, on t'aidera à corriger.


---------------
Can't buy what I want because it's free -
n°1068514
atmakefka
Posté le 02-05-2005 à 10:56:29  profilanswer
 

Nbpremier(x)  
 
   
  Si (x<2)  
  Retourne(FAUX)
  Fin Si
   
  Si (x == 2)  
  Retourne(VRAI)
  Fin si
 
 
  Si ((x % 2) == 0)  
  Retourne(FAUX)
  Fin si
 
 
  i = 3
  TantQue(i*i <= x)
 
 
    Si ((x % i) == 0) Retourne(FAUX);
 
 
    i += 2;
    fin si
 
 
 
  Retourne(VRAI)
 fin tant que

n°1068518
skeye
Posté le 02-05-2005 à 10:59:29  profilanswer
 

Elle est où ta liste là? :??:


---------------
Can't buy what I want because it's free -
n°1069071
atmakefka
Posté le 02-05-2005 à 17:47:36  profilanswer
 

enfin par liste ya pas vrmt de liste, le programme doit juste trouver les 10 premiers nombres premiers (donc avec des tests si, tant que je crois)
personne veut m'aider :/

n°1069083
atmakefka
Posté le 02-05-2005 à 17:58:42  profilanswer
 

j'ai essayé autre chose :
 
Fonction NombresPremiers(NP)
 début
    NP <-lire()
    Si (NP<2)
    Alors écrire("ce nombre n'est pas premier" )
    Fin si
 
..... je n'arrive pas a continuer :/


Message édité par atmakefka le 02-05-2005 à 17:59:14
n°1072071
Giz
Posté le 04-05-2005 à 16:25:45  profilanswer
 

méthode la plus simple : suffit de coder comme la définition même d'un nombre premier : pour chaque nombre Y, tu prends son modulo avec tous les nombres X plus petits que lui même (à partir de 1). Si ce modulo vaut 0 lorsque X est différent de 1 et de Y alors, ce nombre n'est pas premier.
C'est aussi simple que cela : deux boucles imbriquées ;)


Message édité par Giz le 04-05-2005 à 16:26:20
mood
Publicité
Posté le 04-05-2005 à 16:25:45  profilanswer
 

n°1072193
Elmoricq
Modérateur
Posté le 04-05-2005 à 17:38:53  profilanswer
 

Giz a écrit :

pour chaque nombre Y, tu prends son modulo avec tous les nombres X plus petits que lui même (à partir de 1).


 
 
Ce serait pas plus rapide de prendre 1 <= X <= Y/2 comme interval ?

n°1072199
Friday Mon​day
Trop de hérissons écrasés...
Posté le 04-05-2005 à 17:41:25  profilanswer
 

Elmoricq a écrit :

Ce serait pas plus rapide de prendre 1 <= X <= Y/2 comme interval ?


 
avec la racine carré de Y c'est encore mieux (et juste)

n°1072223
Elmoricq
Modérateur
Posté le 04-05-2005 à 18:04:36  profilanswer
 

C'est bon à savoir, juste je ne comprends pas comment la racine carrée permet le test. Va falloir que j'aille chercher la démonstration sur Google. :)
 
Par contre ça fait utiliser la lib m, c'est pas génant en soi mais faut pas oublier de l'inclure à la compilation. ;)

n°1072228
SomeBugsIn​Me
life suxx
Posté le 04-05-2005 à 18:14:52  profilanswer
 

Elmoricq a écrit :

Par contre ça fait utiliser la lib m, c'est pas génant en soi mais faut pas oublier de l'inclure à la compilation. ;)


 
Oui en C. Mais là il veut juste l'algo

n°1072325
Giz
Posté le 04-05-2005 à 19:21:25  profilanswer
 

Elmoricq a écrit :

Ce serait pas plus rapide de prendre 1 <= X <= Y/2 comme interval ?


 
tu as raison, c'est plus performant. Mais bon, ma proposition c'était pour faire simple (les optimisations viennent après).

n°1072334
Profil sup​primé
Posté le 04-05-2005 à 19:39:35  answer
 

Elmoricq a écrit :

C'est bon à savoir, juste je ne comprends pas comment la racine carrée permet le test. Va falloir que j'aille chercher la démonstration sur Google. :)


 
Tu ne comprends pas pourquoi il suffit de tester jusqu'à la racine carrée ? C'est trivial : suppose un diviseur p de n supérieur à sqrt(n), alors il existe un q tel que pq = n. Mais ce q est évidemment plus petit que sqrt(n) et a donc déjà été testé.

n°1072337
sircam
I Like Trains
Posté le 04-05-2005 à 19:40:13  profilanswer
 

2 <= x <= sqr(y) :o
 
Personne pour le crible d'Eratosthène ? Ca n'a rien de compliqué.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1072347
Elmoricq
Modérateur
Posté le 04-05-2005 à 19:47:28  profilanswer
 


 
De fait, c'est trivial.
 
Me sens con, pour le coup.


Message édité par Elmoricq le 04-05-2005 à 19:49:13
n°1072352
KangOl
Profil : pointeur
Posté le 04-05-2005 à 19:56:02  profilanswer
 

sircam a écrit :

2 <= x <= sqr(y) :o
 
Personne pour le crible d'Eratosthène ? Ca n'a rien de compliqué.


2 < x <= sqr(y) :o


---------------
Nos estans firs di nosse pitite patreye...
n°1072354
KangOl
Profil : pointeur
Posté le 04-05-2005 à 19:56:32  profilanswer
 

euh non, finalement c'etait juste...


---------------
Nos estans firs di nosse pitite patreye...
n°1072366
sircam
I Like Trains
Posté le 04-05-2005 à 20:23:57  profilanswer
 

[:jagstang]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1072382
push
/dev/random
Posté le 04-05-2005 à 20:43:26  profilanswer
 
n°1072423
sircam
I Like Trains
Posté le 04-05-2005 à 21:35:57  profilanswer
 

Estil _vraiment_ nécessaire d'écrire ce programme sur une seule ligne ? :o
 
J'veux la version BrainFuck, je comprends pas bien le C.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1093932
Chimerade
Posté le 23-05-2005 à 18:45:25  profilanswer
 

sircam a écrit :

2 <= x <= sqr(y) :o
 
Personne pour le crible d'Eratosthène ? Ca n'a rien de compliqué.


 
Bon, je m'y colle !
 
Le crible d'Érathosthène est un tableau des nombres entiers que l'on écrit bien rangé :
 

 1   2   3   4   5   6   7   8   9  10
11  12  13  14  15  16  17  18  19  20
21  22  23  24  25  26  27  28  29  30
...


 
C'est plus pratique quand c'est bien rangé, mais, c'est pas obligé ; d'ailleurs on peut aussi faire des lignes de n'importe quelle longueur et ça simplifie beaucoup si on choisit une longueur multiple de petits nombres premiers, 2, 3, 5. La dimension du tableau est limitée uniquement par le courage du réalisateur... On peut bien aller jusqu'à un milliard si l'on veut...
 
Le but du jeu est de barrer les nombres au fur et à mesure que l'on découvre qu'ils ne sont pas premiers. On fait une exception pour 1, qui, selon les auteurs, peut être considéré comme premier ou pas premier. On considère pour la suite qu'il n'est pas premier. Donc on commence en cherchant le plus petit nombre qui n'a pas encore été barré (exception pour le 1 : on suppose qu'il est barré). C'est donc 2. Et on barre tous les multiples de ce nombre : 2*2=4, 2*3=6, etc... Si le tableau est bien rangé, on s'aperçoit vite que les multiples de deux, forment des séries géométriquement faciles à repérer. Ici, ce sont cinq colonnes, les colonnes du 2 (sauf le 2, bien sûr), du 2, du 6, du 8 et du 10. D'un coup on a barré tous les multiples de 2.
 
Ensuite on cherche à nouveau le plus petit nombre qui n'a pas encore été utilisé et qui n'est pas barré, donc le 3. On veut barrer 2*3 ; mais c'est déjà barré puisque 2*3 est multiple de 2 aussi. On barre donc à partir de 3*3 ; puis 3*4, 3*5, 3*6, etc...
Et là on s'aperçoit, dans le cas ci-dessus, que les nombres barrés sont alignés sur des diagonales : 12 et 21, 6-15-24-33-42-51, 9-18-27-36-45-54-63-72-81, 30-39-48-57-66-75-84-93-102-111, etc...
 
Ensuite on cherche à nouveau le plus petit nombre qui n'a pas encore été utilisé et qui n'est pas barré, donc le 5. On veut barrer 2*5 ; mais c'est déjà barré puisque 2*5 est multiple de 2 aussi. On veut barrer 3*5 ; mais c'est déjà barré puisque 3*5 est multiple de 3 aussi. On barre donc à partir de 5*5 et là aussi, les multiples de cinq sont bien alignés en deux colonnes (dont l'une est déjà barrée comme multiple de 2).
 
Et ainsi de suite ; ce n'est pas un hasard que le premier nombre à barrer lorsque l'on prend 3, soit 3*3, que le premier nombre à barrer lorsque l'on prend 5 soit 5*5. C'est systématique : puisque, lorsque l'on veut barrer les multiples de p, on est censé avoir barré tous les multiples des nombres premiers inférieurs à p, il est évident que le premier nombre à barrer sera p*p. Et cette remarque permet d'arrêter le processus, lorsque l'on tombe sur un premier p tel que p*p est plus grand que le dernier nombre du crible. Tous les nombres restants sont premiers, et aucun autre ne l'est.

n°1098615
fra0
Posté le 26-05-2005 à 19:20:07  profilanswer
 


bonne idée,
si la mémoire est limitée, y'a toujours ça :
 

Code :
  1. bool isPrime(unsigned int N)
  2. {
  3.     bool ok=N&&N-1;
  4.     for(int d=2;d*d<=N&&(ok&=N%d);d++);
  5.     return ok;
  6. }


 
tant qu'on y est, on peut afficher certains nombres premiers (comme Mersenne 42 et consorts) avec un programme beaucoup plus court que ça...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Algorithme nombres premiers

 

Sujets relatifs
Algorithme du tri en Cconvertir un algorithme en c
[C] Probleme nombres aléatoires tous differentstraitement sur les grands nombres
Retrouver un algorithme de cryptage...Nombres aléatoires
nombres premiers & librairie GMP (mpz_probab_prime_p)premiers pas J2EE (Apache + Tomcat + Eclipse)
librairies des grands nombres : GMP vs NTL ? 
Plus de sujets relatifs à : Algorithme nombres premiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR