Nombres premiers, cribble d'erastothene (k6-2 500 => 0-500.000 en 0.23 s )

Soyez le premier à donner votre avis sur cette source.

Vue 4 789 fois - Téléchargée 116 fois

Description

Trouver les nombres premiers de la facon la plus rapide possible
je joins le makefile pour les linuxiens (bien cachés apparement, vu le nombre
de <conio.h> que je vois (Quelle Horreur !!))

usage : prog <options>;
options : -n <l> Nombre limite\n"
-t Affiche temps d'execution (en secondes)\n"
-w <f> Sortie dans le fichier <f>\n";

Source / Exemple :


/* jerome berthier  (au cas ou on voudrait le savoir) !! 

 Programme réalisé en moins d'une heure donc pas bien relu,
 y'a surement des trucs qui servent à rien
 mais il tourne

  • /
#include <iostream.h> #include <fstream.h> #include <stdlib.h> #include <time.h> #ifndef ULONG #define ULONG unsigned long void AfficheHelp( char * progname = "erastothene" ); int main( int n , char ** A ) { ULONG lim=0; char *OSname; //sauver dans un fichier, ou afficher le temps bool save(false), tps(false); clock_t tdeb; clock_t debprog = clock(); if( n == 1 ) //pas d'argument, on quitte le prog { AfficheHelp( A[0] ); return 1; } for (int i=1 ; i<n ; i++) { if (strcmp(A[i],"-t")==0 ) tps=true; else if (strcmp(A[i],"-n")==0 ) { if (++i<n) lim = (ULONG)atoi(A[i]); } else if (strcmp(A[i],"-w")==0 ) { if (++i<n) { OSname = A[i];save=true;} } else { AfficheHelp( A[0] ); exit(1); } } try{ //construcion du tableau de booleen bool * prem = new bool[ lim+1 ]; // memset(prem , true , sizeof(prem) ); for( ULONG i=2; i<= lim ; i++ ) prem[i] = true; //debut if( tps ) { tdeb = clock(); } for( ULONG i=2; i<= lim ; i++ ) if( prem[i] ) for( ULONG j=2*i; j<=lim; j+=i ) prem[j]=false; if( tps ) { cout << "Duree calcul : " << (double)(clock() - tdeb )/CLOCKS_PER_SEC << endl; } //fin if( save ) { ofstream OS(OSname); if( tps ) { tdeb = clock(); } for( ULONG i=2; i<=lim ; i++ ) if( prem[i] ) OS << i << '\n'; OS.close(); if( tps ) { cout << "Duree ecriture : " << (double)(clock() - tdeb )/CLOCKS_PER_SEC << endl; } } if( tps ) { cout << "Temps d'execution total : " << (double)(clock() - debprog )/CLOCKS_PER_SEC << endl; } } catch( ... ) { cerr << "Erreur !! (Mais ou ??? lol) \n"; exit(1); } return 0; } /////////////////////////////// FIN CODE DEBUT MAKEFILE basique /////////////////////////////////////// CXXF=-Wall -Wno-deprecated TARGET=run $(TARGET): erastothene.cc g++ $(CXXF) erastothene.cc -o $(TARGET)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
Euh, si j'ai bien compris ton programme, si je donne une limite de 100 000, il va creer un tableau de 100 000 booleens ???? O_o
Messages postés
12
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
17 juillet 2003

C' est faux il y a quand même beaucoup de Linuxiens mais ils sont discrets
Messages postés
6
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
8 avril 2003

SVP mettez des commentaires

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.