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

Téléchargez C++ Discussion :

Nombres premiers


Sujet :

Téléchargez C++

  1. #1
    Robot Forum
    Avatar de forum
    Inscrit en
    novembre 1999
    Messages
    2 008
    Détails du profil
    Informations forums :
    Inscription : novembre 1999
    Messages : 2 008
    Points : 2 437
    Points
    2 437
    Par défaut Nombres premiers
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Nombres Entiers

    Vous entrez un nombre et le programme trouvera tous les nombres entiers compris entre 0 et votre nombre!

    Qu'en pensez-vous ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 199
    Points : 28 107
    Points
    28 107
    Billets dans le blog
    2
    Par défaut
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 787
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 787
    Points : 5 269
    Points
    5 269
    Par défaut
    Hoe,

    Quel est l'intérêt ?

    En plus, la recherche des premiers est loin d'être optimale :

    - On cherche de 0 à N, or un nombre < 2 ne peut pas être premier

    - le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(nombre % 2 != 0 || nombre % 5 != 0)
    laisse passer tous les nombres, sauf les multiples de 2 ET 5 en même temps !

    - Puis, on va faire le test de division avec tous les nombres < N, donc y compris les nombres pairs.

    - Et cette fonction trouve 1 comme premier !

    Bref, copie à revoir d'urgence.
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    septembre 2007
    Messages
    7 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 181
    Points : 22 899
    Points
    22 899
    Par défaut
    D'accord, il s'agit de trouver les nombres premiers.

    Parce que là, il y a écrit « nombres entiers ». Trouver tous les nombres entiers entre 0 et n, c'est sympa mais ce n'est pas difficile ! :-)

  5. #5
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 787
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 787
    Points : 5 269
    Points
    5 269
    Par défaut
    Keo,

    C'est ce que je me suis dit aussi, mais j'avais déjà de quoi répondre.
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  6. #6
    Membre habitué

    Inscrit en
    février 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : février 2011
    Messages : 16
    Points : 140
    Points
    140
    Par défaut optimisation possible de est_premier(int nombre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool est_premier(int nombre)
    // verifie si nombre est multiple 2 ou 3 puis verifie si nombre est multiple de p = 6 i ± 1 tant que p * p <= nombre
    { 
        if (nombre < 2) return false;
        int p = 2;
        int s = 1;
        int i = 0;
        while (p * p <= nombre) {
            if (nombre % p == 0) return false.
            if (p == 2)  ++p; else {if (s == 1) ++i; p = 6 *i + (s = - s);}
        }
        return true;
    }

  7. #7
    Expert éminent

    Inscrit en
    novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : novembre 2005
    Messages : 5 145
    Points : 6 863
    Points
    6 863
    Par défaut
    Garder tous les premiers déjà trouvés mais ne pas s'en servir lors de la recherche des autres?

    Passer un vecteur par valeur?

    La bonne méthode pour ce problème, c'est le crible d'Erathostène.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : avril 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Alternative
    Une alternative très simple pour calculer les nombres premiers entre 2 et 4 milliards et quelques ...enfin je crois..😉
    Sur ma tablette Nexus 10 donne les premiers inférieurs ou égaux à 500000 en moins de 2 secondespremier.c

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : avril 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Voici le code
    Désolé, je croyais avoir inséré dans PJ mais non😱
    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
    35
    36
    37
    38
    39
    40
    41
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    /* Générateur de nombres Premiers */
    /* Inférieurs ou égaux à 4294967295 */
    /* Auteur : Lemariey Jean-Philippe */
    int main(int argc, char *argv[])
    {
    	div_t resultat;
    	int i = 3;
    	int j = 1;
    	int n = 0;
    	int r = 0;
    	double m = 0.0;
    	printf
    		("Ceci est un générateur de nombres Premiers inférieurs ou égaux à N \n");
    	printf("Votre valeur de N svp : ");
    	scanf("%i", &n);
    	printf("\n 2 ");
    	while (i <= n)
    	{
    		j = 2;
    		resultat = div(i, j);
    		r = resultat.rem;
    		m = sqrt((double)i);	// pas la peine de chercher au delà de
    							             	// racinecarrée i
    		while (j <= m && r != 0)
    		{
    			j++;
    			resultat = div(i, j);
    			r = resultat.rem;
    		}
    		if (j > m)
    		{
    			printf("%d ", i);
    		}
    		i += 2; //On ne teste que les nombres impairs
    	}
    	return 0;
    }

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : août 2017
    Messages : 2
    Points : 0
    Points
    0
    Par défaut Nombres Premiers
    Code : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <math.h> 
    /*  Nombres Premiers */ 
    /* Inférieurs ou égaux à N */ 
    /* Auteur : Jaouad ALLAMI */ 
    int main(int argc, char *argv[]) 
    { 
     
    	int i = 3; 
    	int j = 1; 
    	int n = 0; 
    	int r = 0; 
    	div_t resultat; 
    	double m = 0.0; 
    	printf 
    		(" Nombres Premiers inferieurs ou egaux a N \n"); 
    	printf("Saisir la valeur  N svp : "); 
    	scanf("%i", &n); 
    	printf("\n 2 \t"); 
    	while (i <= n) 
    	{ 
    		j = 2; 
    		resultat = div(i, j); 
    		r = resultat.rem; 
    		m = sqrt((double)i);	// pas la peine de chercher au delà de 
    							             	// racinecarrée i 
    		while (j <= m && r != 0) 
    		{ 
    			j++; 
    			resultat = div(i, j); 
    			r = resultat.rem; 
    		} 
    		if (j > m) 
    		{ 
    			printf("%d \t", i); 
    		} 
    		i += 2; //On ne teste que les nombres impairs 
    	} 
    	//return 0; 
        	printf("\n\n vous avez terminer : "); 
        	printf("\n\n tapper un nombre pour sortir : "); 
    	scanf("%i", &j); 
    }

  11. #11
    Membre éprouvé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    mai 2016
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2016
    Messages : 307
    Points : 1 203
    Points
    1 203
    Par défaut
    Programme C dans la section C++ ...
    En C++, de nos jours, une table de nombres premiers, ça se calcule à la compilation
    (enfin, je ne suis pas sûr que ce soit possible, en fait. Avis aux amateurs de défis).

  12. #12
    Modérateur

    Avatar de Winjerome
    Homme Profil pro
    Inscrit en
    septembre 2009
    Messages
    10 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 496
    Points : 61 022
    Points
    61 022
    Par défaut
    Et à quelques lignes près, c'est l'exacte reprise du précédent…
    Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
    Une erreur ? Messages d'erreur et avertissements
    "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs entières, résultat souhaité vs obtenu...).
    En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
    L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
    Mes extensions FireDVP (Firefox), ChroDVP (Chrome) : suivi des nouveaux messages, boutons/raccourcis et bien plus !

Discussions similaires

  1. Réponses: 24
    Dernier message: 27/09/2005, 22h16
  2. [défi n°8]: premiers nombres premiers
    Par javatwister dans le forum Général JavaScript
    Réponses: 41
    Dernier message: 14/06/2005, 11h22
  3. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    Réponses: 12
    Dernier message: 18/09/2004, 15h57
  4. Cripter avec des nombres premiers
    Par clovis dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/04/2004, 20h10
  5. premier nombre premier superieur à m=10^100+1
    Par azman0101 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 17/04/2003, 04h23

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