Obtenir toutes les nombres premiers dans une grande rangée au moins de 10 ms!

Description

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 / Exemple :


#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!

Codes Sources

A voir également

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.