IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Optimisation de recherche des nombres premiers jusqu’à une valeur x maximum


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Retraite
    Inscrit en
    Juillet 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraite

    Informations forums :
    Inscription : Juillet 2024
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Optimisation de recherche des nombres premiers jusqu’à une valeur x maximum
    Bonjour : Existe t-il un moyen d’optimiser mon code en C svp ?

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    #include <stdio.h>
    #include <stdlib.h>
    #include <new>
     
    int main()
        {
            int val;
           printf ( "\n  Insérez la valeur sup de vos nombres premiers : " ) ;
           scanf("%d", &val);
           bool  * Tab = new bool [val];
            //  RECHERCHE DE TOUS LES MULTIPLES
                                 int a=3,c=1;
                                 while ( c>0)
                                   {
                                      for (int b =0 ; a*(a+b)< val ; b=b+2)
                                       {
                                         Tab[a*(a+b)]=1;
                                          c= b/2;
                                        }
                                          a=a+2; c--;
                                     }
     
             //   AFFICHAGE DES NOMBRES PREMERS-
                              int aff=0;
                                      for (int i =3; i < val; i = i+2)
                                       {
                                           if (Tab[i]==0 )
                                         { 
                                            printf("\t %d", i); 
                                            if ((aff++)%10==0)
                                            printf("\n");
                                          }
                                       }
         }

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 388
    Points : 23 707
    Points
    23 707
    Par défaut
    Bonjour,

    Ton code est effectivement écrit en C, à l'exception de #include <new> (inutile ici) et de l'utilisation de new en ligne 10. C et C++ sont deux langages différents, même si le second est conçu pour rester en majorité compatible avec le premier.

    Je déplace ton fil dans le forum C.

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 573
    Points : 7 687
    Points
    7 687
    Par défaut
    Bonjour,

    La ligne C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool  * Tab = new bool [val];
    n'est pas valide, elle alloue un tableau de bool qui n'est pas initialisé, il faut mettre tous les éléments à false.
    En C++, il faudrait écrire bool * Tab = new bool [val]{};.
    En C, il faut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool  * Tab = calloc( val, sizeof(bool) );
    Et 2 est premier, et n'est pas affiché par le programme.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 946
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 946
    Points : 5 659
    Points
    5 659
    Par défaut
    Bonjour,
    Citation Envoyé par dalfab Voir le message
    Et 2 est premier, et n'est pas affiché par le programme.
    Beaucoup de débutants qui si lancent dans les premiers l'oublient,
    et probablement n'en savent rien.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Retraite
    Inscrit en
    Juillet 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraite

    Informations forums :
    Inscription : Juillet 2024
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Initialisation d’un tableau à false
    Apparemment l’initialisation à false est d’emblée faite par défaut. Sinon j’aurais fait une instruction d’initialisation. En tout cas le programme tourne sans erreur et tous les multiples sont initialisés à True ici .
    Merci de cette remarque elle mérite donc une précision .
    Je vais faire la correction.
    Pour le 2 oui, je savais.......petite flemme sans aucun doute

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Retraite
    Inscrit en
    Juillet 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraite

    Informations forums :
    Inscription : Juillet 2024
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Plus particulièrement j’aimerais connaître un moyen de supprimer les multiples doublons triplets etc !!
    Quand la décomposition d’un multiple est constituée de plus de 2 nbs premiers, on a à coup sûr des doublons triplets etc etc. Il devient évident qu’à part la première valeur calculée toutes les autres ralentissent le temps d’exécution. Comment éviter ce désagrément? Je ne suis pas sûr que la réponse existe. Votre avis?

  7. #7
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 043
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 043
    Points : 8 253
    Points
    8 253
    Par défaut
    Citation Envoyé par Krotoku Voir le message
    Apparemment l’initialisation à false est d’emblée faite par défaut. Sinon j’aurais fait une instruction d’initialisation.
    Fausse idée, ce n'est pas le cas.
    Ça l'est avec calloc.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Retraite
    Inscrit en
    Juillet 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraite

    Informations forums :
    Inscription : Juillet 2024
    Messages : 4
    Points : 1
    Points
    1
    Par défaut OK, très bien
    Merci pour la precision

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/01/2023, 14h20
  2. Réponses: 2
    Dernier message: 06/11/2021, 19h54
  3. Réponses: 2
    Dernier message: 10/09/2007, 19h43
  4. [débutant]Trouver des nombres premiers
    Par Sébastien L dans le forum Langage
    Réponses: 17
    Dernier message: 19/10/2006, 12h21
  5. Cripter avec des nombres premiers
    Par clovis dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/04/2004, 19h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo