Les nombres premiers (crible d'erathostène)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 211 fois - Téléchargée 29 fois

Contenu du snippet

Ce code permet de trouver tous les nombres premiers d'un intervalle de 1 à n...
Il se base sur l'algorithme du crible d'Erathostène (http://www.chez.com/algor/math/eratho.htm)

Source / Exemple :


#include <stdio.h>

int main()
{
    size_t size;
    int *t;
    int i, k;
    FILE *fp = fopen("nb.txt", "w");
    /* Allocation */
    printf("Taille du tableau :\n");
    scanf("%d", &size);
    t = (int *)malloc(size * sizeof(int));
    if(t == NULL){ printf("Memoire insuffisante.\n"); exit(getch()); }
    /* Initialisation */
    for(i = 0; i < size; i++) t[i] = i+1;

  • t = 0;
/* On remplace par 0, tout nombre non premier */ for(i = 2; i <= size; i++) for(k = i; (k < size) && ( t[i-1] != 0 ); k++) if(t[k] != 0) if( (t[k] % i) == 0 ) t[k] = 0; /* Affichage */ for(i = 0; i < size; i++) { if(i % 10 == 0) printf("\n"); printf("%03d ", t[i]); } /* Log dans un fichier */ if(fp == NULL){ printf("Erreur d'écriture.\n"); exit(getch()); } fprintf(fp, "Nombres premiers de 1 à %d :\n", size); for(i = 0; i < size; i++) { if( (i % 10 == 0) && (i != 0) ) fprintf(fp, "\n"); if(t[i] != 0) fprintf(fp, "%d ", t[i]); } fclose(fp); getch(); return 0; }

Conclusion :


Il affiche les resultats et les log dans un fichier. Par contre il y'a un petit bug de mémoire, on ne peut pas rentrer plus de 900 en taille de tableau, je ne comprends pas pourquoi. J'ai traduit le code en Perl, aucuns soucis ! (normal, pas de gestion de la mémoire). Si quelqu'un sait pourquoi, ça m'interesse. J'ai essayé de jongler entre les size_t et int dans les déclarations mais ça ne change rien...

A voir également

Ajouter un commentaire

Commentaires

coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
c'est pour ça que séparer C et C++ n'empéchera pas les programmes de débutants...

Et de toute façon, ces programmes même basics sont constructifs pour l'auteur au moins...

même si le lecteur s'emerde un peu, lui progresse, et c'est un peu le but des forums d'apel a l'aide...

Je pourais demander a tot les programmeurs ici présent quel était leur premier programme, je penses qu'il ne me répondront pas qu'ils ont commencé par réécrire le kernel de MrTorvald avec des fonctionalitées suplémentaires, et qu'il l'ont garedé pour eux car ils trouvaient ce programme sans interet...

Vous me réponderez ou hello world, ou ce crible, ou un autre programme de base... Et seconde question, a combien de personnes vous l'avez montré ?
Et la, je penses que les réponses seront nombreuses...

Ces questions ne s'apliquent qu'aux personnes aprennant seules, ceux qui prennnet des cours ont tout vu diférement (enpré maché...)...

Et je penses que c'est cnormal...
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
18
Mais rassure toi, beaucoup de progs pro ne sont qu'en C, tel le kernel mode ou le C++ est exclu.
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
cette discution est partie du fait que l'on devrait séarer C et C++...

Je n'ai jamais dis que j'était un crack en programmation, je n'ai jamais fait un programme C++, mais j'ai fait un bon paquet de programmes, évidement,ayant perdu mon temp dans un language aussi "merdique1" que le Qbasic ( j'y ai passé quatre ans, j'ai fait un tas de programmes, j'en ai gardé 104...) je n'ai pas touché aux suptilitées de languages aussi performant que le C et le C++.

Mais je penses que le C n'est pas un language 'incompétant', pour la simple raison que les codes des linux mag sont quasiment otus en C (le reste étant du perl), si ils le présente, c'est donc que l'on peut en faitre quelquechose...

Je penses que l'on ne devrait pas séparer ces deux languges car ils sont vraiment proches...

Les seuls arguments adérant a la thèse adverse : Bcp de programmes C sont des programmes pour débutants...

Je réponds possible, et c'est en s'entrainant avec les meilleurs que l'on devient des leurs (c'est pour cette raison que je suis venu sur ce site, et je penses avoir fait pas mal de progrès depuis que j'ai posté ma première source)

Second argument un programme C est aussi compilable par un compilo C++ donc, on pourra donc poster nos sources a deux endroits... plutot illogique comme démarche non ?


Dsl si j'ai paru prétentieux, je ne le suis pas en général... Je sais parfaitement que le C++ n'est pas mon demaine, que je débute seulement en programmation, que vous êtes largement plus qualifiés que moi pour coder.
TheSaib
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
zorg a raison :
"coucou747, les templates, le polymorphisme, tout ca, si tu ne connais pas, c'est que tu n'en as pas l'utilité, te "

Mais dans ce cas là polémique pas sur ce que tu ne connais pas coucou47
TheSaib
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
"Les templates, a moins que je ne me trompe, c'est des calculs fait par le compilos qui permettent d'éviter le précalcul... c'est vrai que c'est pas faisable en C, mais on peut le faire a la main, ou avec un programme d'interprétation c..."

Tu te trompes ...


""Pour moi, le C++ n'a comme avantages que le fait que le code soit fait de plein de fonctions apelés automatiquement (dans les classes) et plein de fonctions réutilisables dans ces classes... Donc, plus simple pour commencer un projet après un autre projet finit..."

Ya quoi d'automatique ? Les classes permettent de faire des objets , de faire du polymorphisme , de l'heritage et de la surcharge , et si les namespaces sont suportés ca permet de hierarchisé, organisé et surcharger des classes dans les applications.

Je crois que tu as encore des années avant de comprendre ce qu'est le développement et surtout faire preuve un peu d'humilté.

"et j'ai 15 ans..." Je t'ai déjà dit que ton age ne justifie rien arrête de le sortir a toute les sauces

TheSaiB (avec un b comme seb) et J'ai 22 ans (ouaaaouuuuh) et j'ai encore beaucoup de chose à apprendre

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.