begin process at 2010 03 16 12:48:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > OBTENIR TOUTES LES NOMBRES PREMIERS DANS UNE GRANDE RANGÉE AU MOINS DE 10 MS!

OBTENIR TOUTES LES NOMBRES PREMIERS DANS UNE GRANDE RANGÉE AU MOINS DE 10 MS!


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :premiers, sieve Niveau :Expert Date de création :19/04/2007 Date de mise à jour :19/04/2007 17:55:42 Vu / téléchargé :4 692 / 173

Auteur : elkasimi2007

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (25)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
salut
c'est comme vous avez compris du titre
c'est une implementation de l'algorithme sieve pour trouver les nombres premier.
détail dans le zip
merci pour votre visite!
:)

Source

  • #include<stdio.h>
  • void sieve(int L,int U) {
  • int i,j,d;
  • d=U-L+1;
  • char flag[d];
  • for (i=0;i<d;i++) flag[i]=1; /* par défaut tout est marqué comme premier */
  • for (i=(L%2!=0);i<d;i+=2) flag[i]=0;
  • /*on élimine les multiples des nombres premiers de 3 jusqua sqrt(U) */
  • for (i=3;i*i<=U;i+=2) {
  • if (i>L && !flag[i-L])
  • continue;
  • /* On choisit le facteur qu'on va éliminer ses multiples */
  • j=L/i*i;
  • if (j<L) j+=i;
  • if (j==i) j+=i; /* il faut que j soit différent de i */
  • j-=L; /* On décale les indices */
  • for (;j<d;j+=i) flag[j]=0;
  • }
  • if (L<=1) flag[1-L]=0;
  • if (L<=2) flag[2-L]=1;
  • for (i=0;i<d;i++)
  • if (flag[i])
  • printf("%d\n",L+i);
  • }
  • int main(){
  • int m,n;
  • while(scanf("%d%d",&m,&n) == 2){
  • sieve(m,n);
  • printf("\n");
  • }
  • return 0;
  • }
#include<stdio.h>

    void sieve(int L,int U) {
      int i,j,d;
      d=U-L+1; 
      char flag[d];
      for (i=0;i<d;i++) flag[i]=1; /* par défaut tout est marqué comme premier */
      for (i=(L%2!=0);i<d;i+=2) flag[i]=0;
   /*on  élimine les multiples des nombres premiers de 3 jusqua sqrt(U) */
      for (i=3;i*i<=U;i+=2) {
         if (i>L && !flag[i-L]) 
            continue;
      /* On choisit le facteur qu'on va éliminer ses multiples */
         j=L/i*i; 
         if (j<L) j+=i;
         if (j==i) j+=i; /* il faut que j soit différent de i */
         j-=L; /* On décale les indices */
         for (;j<d;j+=i) flag[j]=0;
      }
      if (L<=1) flag[1-L]=0;
      if (L<=2) flag[2-L]=1;
      for (i=0;i<d;i++) 
         if (flag[i])
            printf("%d\n",L+i); 
   
   }
    int main(){
      int m,n;
      while(scanf("%d%d",&m,&n) == 2){
         sieve(m,n);
         printf("\n");
      } 
      return 0;
   }

 Conclusion

j'espère qu il sera utile pour vous!

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Sieve
    • Eratosthenes' sieve..pdfTélécharger ce fichier [Réservé aux membres club]28 847 octets
    • sieve.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier939 octets
    • sieve.JPGTélécharger ce fichier [Réservé aux membres club]Voir ce fichier63 747 octets

Télécharger le zip


 Historique

19 avril 2007 17:55:42 :
ajout du code source pour vous :)

 Sources du même auteur

MEILLEURE MÉTHODE POUR CALCULER UN PUISSANCE
Source avec une capture EVALUATION D'UNE EXPRESSION PARENTHÉSÉE
Source avec une capture CALCUL DU FACTORIEL DES GRANDS NOMBRES EN TOUTE RAPIDITÉ
JOUR A PARTIR D'UNE DATE MM/JJ/YYYY
Source avec Zip Source avec une capture IMPLÉMENTATION DE MINIMUM SPANNING TREE POUR UNE SOCIÉTÉ D'A...

 Sources de la même categorie

CALCULE LOG(X) par tagtog
Source avec Zip Source avec une capture ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROI... par Thuzhen
Source avec une capture CALCUL DE VARIANCE par Minilogus
Source avec une capture GÉNÉRATEUR DE CLÉS SUR 26 DIGITS AU FORMAT HEXADÉCIMAL par besilent
Source avec Zip Source avec une capture ALGORITHME DE CRYPTAGE/DECRYPTAGE par besilent

 Sources en rapport avec celle ci

Source avec Zip FACTORISATION D'UN NOMBRE EN NOMBRE PREMIER par Tearsofdestiny
NOMBRES PREMIERS - ERATOSTHENE QUASI ILLIMITÉ par bzrd
Source avec Zip Source avec une capture RECHERCHE DE NOMBRES PREMIERS PAR LE CRIBLE D'ERATOSTHENE par _michel
Source avec Zip VB/DELPHI/C++ QUEL EST LE MEILLEUR? par zac

Commentaires et avis

Commentaire de BruNews le 19/04/2007 18:55:20 administrateur CS

d=U-L+1;
char flag[d];  ça compile ???

Commentaire de 6co le 19/04/2007 19:28:31

ça compile sans problème chez moi (avec GCC)

Commentaire de BruNews le 19/04/2007 19:35:40 administrateur CS

Ben ça s'arrange pas, tu n'as aucun controle du moment de la desalloc.

Commentaire de 6co le 19/04/2007 19:54:50

excuse moi, je ne saisis pas ce que tu veux dire...

Commentaire de elkasimi2007 le 19/04/2007 20:01:21

salut,
vraiment c'est formidable on ressent vraiment que le monde est vivant
avec 4 commentaires,merci pour votre soutien les gars.
je vous promis toujours mon meilleur possible!

Commentaire de BruNews le 19/04/2007 20:02:07 administrateur CS

Je pense tout simplement qu'il y a des langages interprétés pour ce genre de connerie, gabage collector et autres bidules.

Commentaire de Cyberboy2054 le 19/04/2007 20:27:05

Moi aussi j'ai du mal à comprendre comment ce genre de syntaxe peut etre géré efficacement dans un programme de plus grande échelle. D'ailleurs tu devrais etre content Brunews, mais apparement ce genre d'ecriture ferait partie des futures normes du c++ (selon un pote en iut info, qui le tient d'un de ses profs). On leur apprend même a utiliser l'ecriture ci dessus O_o

A remplacer bien evidemment par un char *flag = (char*)malloc (d*sizeof(char)) puis free (flag) en fin de programme, pour rester dans du C propre et portable. D'ailleurs ca ne compile pas sous visual C++ 6.

Commentaire de BruNews le 19/04/2007 20:39:42 administrateur CS

Je n'ai pas envie d'essayer sur VC 2005, je tiens à controler les allocs et desallocs moi meme sinon je vais faire du VB.

Commentaire de acx01b le 19/04/2007 20:56:56

salut

http://mx.isti.cnr.it/cgi-bin/conan?key=CC~Language_topics~Builtin_Functions~__ALLOCA&title=VMS%20Help&referer=


avec gcc -S sous cygwin:

void alala() {
int d = 50;
char c[d];
}

       .globl _alala
       _alala:
pushl %ebp
movl %esp, %ebp

subl $8, %esp
movl %esp, %edx
movl $50, -4(%ebp)
movl -4(%ebp), %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
call __alloca
movl %edx, %esp
leave
ret

en clair ça veut dire que c'est équivalent à:
void alala() {
int d = 50;
char *c = __alloca(50);
}

Commentaire de acx01b le 19/04/2007 20:59:35

j'ai vérifié en rajoutant

void alala() {
int d = 50;
char *c = __alloca(50);
c[0] = 48;
}

la zone est bien dans la pile
je trouve ça utile, à part le fait d'appeler __alloca
(pourquoi pas un
sub $50, %esp
directement au lieu d'appeler __alloca ??)

Commentaire de BruNews le 19/04/2007 21:13:03 administrateur CS

dans le cas de:
d=U-L+1;
char flag[d];
le compilo ne pourrait pas présumer que ça va tenir sur stack.

Commentaire de Ombitious_Developper le 19/04/2007 22:20:09

Salut tous:

Brunews >> crois moi le garbge collector n'est pas une connerie.

Commentaire de BruNews le 19/04/2007 23:06:45 administrateur CS

Le nescafé non plus, sauf que ça n'a plus rien à voir avec du café.

Commentaire de Ombitious_Developper le 19/04/2007 23:44:46

Il y a des gens qui disent que "Java est une réligion".
Pas moi, mais je comprends ce qu'ils veulent dire. C'est le goût et l'extase de la programmation.
Personnellement, Je déteste le café et tout ses dérivées

Commentaire de Kirua le 20/04/2007 11:09:04

+1 pour brunews, autant pour le café que pour le garbage collector :) et j'adore le café.

C'est une question d'habitude on va dire, garbge collector ou pas ... Mais je me sens terriblement impuissant quand je programme avec un GC personnellement :/. La gestion de la mémoire est vrmnt un souci central quand on programme. C'est déjà compliqué de savoir quand l'argument est passé par valeur ou par référence en Java O_o.

Du reste, le petit détail de syntaxe qui vous occupe est une extension GCC je crois. Suffit de ne pas l'utiliser.

Au fait: le screenshot est peut-être pas super utile, et bon ... "grande rangée", ça reste à voir. Pour les nombres premiers, couvrir tous les nombres représentables avec un int est assez standard, donc ne nous emballons pas ;).

Commentaire de DeAtHCrAsH le 20/04/2007 11:51:18

Pour ma part je pense que le GC a tout à fait sa place dans les langages managés qui se veulent rapide et sure en terme de développement.
Maintenant il est sure qu'un "vrai logiciel" (à mon sens) a tout interet à etre codé en C/C++/ASM tout court.

Commentaire de ThicAThic le 20/04/2007 15:49:29

Peux-tu me donner un lien vers un site qui expliquerait l'algorithme de sieve, SVP ? Je n'en ai pas trouvé sur BibMath ni d'autres algo donnant et/ou calculant la suite des nombres premiers. Et ça m'intéresse. Merci.

Commentaire de elkasimi2007 le 20/04/2007 16:41:38

salut,
je crois que le pdf qui est dans le zip explique l'algorithme de sieve.
merci pour vos commentaires.

Commentaire de Kirua le 20/04/2007 17:51:29

"Sieve", c'est pas juste le mot anglais pour "crible" (d'Eratosthène) ? Le coup classique qui marche bien si on a bcp de mémoire quoi :)

Commentaire de elkasimi2007 le 20/04/2007 23:34:51

exactement Kirva!
son seul inconvénient c'est la grande mémoire!dieu merci qu'on est dans l'époque des 1Go de RAM!
a bientot..

Commentaire de Yunchi le 20/07/2007 10:21:04

il n'y a pas une infinite de nombres premiers ?

Commentaire de Kirua le 20/07/2007 11:46:16

Ben si, et c'est même très facile à prouver (ce qui ajoute à l'élégance de la démonstration ^^). Mais on parle ici de trouver tous les nombres premiers dans un intervalle fini, et ça, il y en a un nombre fini.

Commentaire de _michel le 28/06/2008 15:17:00

"exactement Kirva!
son seul inconvénient c'est la grande mémoire!dieu merci qu'on est dans l'époque des 1Go de RAM!
a bientot.."
Justement pour la mémoire il y a une optimisation : on peut juste utiliser un bit par nombre impair, ça diminue par 16 l'espace mémoire requis. Comme ça on gagne 8 ans sur la technologie (loi de Moore). Pour la rapidité je ne sais pas si ça rend plus rapide ou moins (je dirais moins mais on ne sais pas car les opérateurs << et >> sont extremement rapides).

Commentaire de _michel le 28/06/2008 23:24:54

Pour bcc55, ça ne compile pas...

Commentaire de _michel le 28/06/2008 23:50:04

http://www.cppfrance.com/codes/RECHERCHE-NOMBRES-PREMIERS-CRIBLE-ERATOSTHENE_38335.aspx

Voila un exemple d'optimisation avec la mémoire. En plus avec les opérateurs basiques (&, |, <<, >>) on gagne beaucoup en vitesse.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

une aide pour écrire un algo et un prog sur le nbr premiers [ par Julius Caesar ] Bonjour, je n'arrive pas écrire l'algo et le prog de ce sujet:"Ecrivez un algo et un prog, qui affiche les nbrs premiers inferieurs à un entier n (ave Supprimer les n premiers octet d'un fichier [ par arc59 ] Bonjour, dans mon programme de modification des ID 3 tag, je voudrai permettre à l'utilisateur de supprimer les Id3tag de version 2. Ces tag sont plac Découpage de n premiers caractères d'une chaine [ par Guidelor ] BonjourJ'ai une chaine1 ="aaaaaaaaa123456"J'aimerais enlever "aaaaaaaaa"comment faire sachant que ce que je ve enlever est situé entre le 1er et le 10 Mes premiers pas sous linux sniff je suis ému [ par asmanur ] Alors voila je me suis mis à la prog sous linux et j'ai quelqes prob & questions - quand je tape g++ main.cpp il me met qu'il ne conait pas g++ -quan Premiers pas avec visual c++ express edition... [ par gdpasmini ] Hello ! je débute avec visual c++ express edition, ma question va peut etre sembler stupide. J'ai créé un nouveau projet "windows form application". Nombres premiers en C Urgent [ par maxfrancky ] il me faut réaliser un programme permettant de lister les n premier nombres premier n utilisnat une liste chainée de structure contenant le nombre pre factorial factors [ par brahimhakkou ] svp aidez moi c urgentin this problem we want to determine the maximum number of integer terms (excluding1) that can be used to express n! par exemple affichage 3 premiers caractere [ par OTHKREEN ] <td id="HB_Focus_Element" valign="top" width="100%" b Probleme de tri [ par bebeesther ] Si tu peux m'aider, je serai tres reconnaissant!!!!!!!!Merci d'avance. Nombres premiers... corrigez moi svp =3 [ par nisso13 ] Salut, voila je m'explique, je voudrais faire un programme qui me liste les nombres premiers inferieurs à 1000... je l'ai fait mais il a une erreur qu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales