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

Mathématiques Discussion :

Déterminer un nombre premier (Routines)


Sujet :

Mathématiques

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Déterminer un nombre premier (Routines)
    Bonjour, je n'arrive pas a créer une routine me servant à determiner si un nombre est premier ou pas.
    La definition d'un nombre premier, c'est qu'il soit divisible que par 1 ou par lui meme. Mais je n'arrive pas à le mettre en forme...
    C'est un algorithme :

    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
    fonction premier(a : Entier) : Boleen
    variables
    	boleen c
    	entier b
            char x
    debut
    	c <- Vraie
    	pour i de 2 à a faire
    		tant que c = Vraie faire
    			x <- a/i
    				si x !== a
                                    c = Faux
    				finsi
    		fintantque
    	finpour
    fin
    merci!

    Edit : changement de programme on m'a parlé du crible d'erathostene. Je vais m'y essayer.

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    C'est le forum C++ ici... pas algo :/


    (par ailleurs sur wiki t'as tout plein d'algo pour ce genre d'application.)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Goten Voir le message
    C'est le forum C++ ici... pas algo :/
    Je pense que justement le problème est l'implémentation en C++ d'un algo. Pour une fois qu'il y a un algo, saluons l'effort


    quelques remarques sur ton algo

    • "pour i de 2 à a faire", tu peux te contenter de "pour i de 2 à racine(a) faire"
    • "x <- a/i" avec a, i et x entier, cela donne une division entière (3/2 = 1)
    • Je ne comprends pas ce test (si c'est un test) "si x !== a"
    • a, b, c, i, x sont des variables qui pourraient avoir un nom plus parlant (a NombreATester par exemple)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Oki, donc je rajouterais aux remarques de ram-0000, pourquoi le résultat de la division est stocker dans un char???
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    merci ram pour ton aide et tes conseils.
    je modifie tout ça celon tes criteres.
    Je continue et j'edit ce post avec le resultat.
    Sur wiki je n'ai pas trouver encore d'algo ( je cherche actuellement )
    Mais peut-on simplement creer un algo ou on test toutes les divisibilités du nombre, et s'il n'y a que lui meme ( j'exclue 1 ) alors il est premier.
    Mon test justement sert à rien, en fait il est incomplet car j'essaye dans ce passage de determiner s'il a un diviseur inferieur à lui meme. Il ne serait donc pas premier.

    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
    fonction premier(NombreATester : Entier) : Boleen
    variables
    	boleen resultat
    	entier x
    debut
    	resultat <- Vraie
    	pour i de 2 à NombreATester faire
    		tant que resultat = Vraie faire
    			x <- NombreATester/i
    				si x est un entier !== 1 alors
    					resultat = Faux
    				finsi
    		fintantque
    	finpour
    	retourner resultat;
    fin
    maintenant c'est comment traduire 'si x est un entier'
    c'est possible?
    ou je dois faire autrement ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Voila je penses avoir trouver une bonne methode.
    Dites moi ce que vous en pensez :
    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
    fonction premier(NombreATester : Entier) : Boleen
    variables
    	boleen resultat
    	entier x
    debut
    	resultat <- Vraie
    	pour i de 2 à NombreATester faire
    		si NombreATester(modulo i) == 0 alors
    			si NombreATester/i > 1 alors
    				resultat <- Faux
    			finsi
    		finsi
    	finpour
    	retourner resultat;
    fin

  7. #7
    Membre actif
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Points : 213
    Points
    213
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    quelques remarques sur ton algo

    • "pour i de 2 à a faire", tu peux te contenter de "pour i de 2 à racine(a) faire"
    ça réduira le temps de calcul.

    Citation Envoyé par boxydruM Voir le message
    maintenant c'est comment traduire 'si x est un entier'
    c'est possible?
    Tout est possible.
    Pour savoir si une division donne un nombre entier il "suffit" de tester si le reste de la division est nulle.

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Une petite modification encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	pour i de 2 à racine(NombreATester) faire
    		si NombreATester(modulo i) == 0 alors
    			resultat <- Faux
    		finsi
    	finpour
    Tu peux faire cette simplification car i (que l'on pourrait renommer en 'diviseur' par exemple ) ne vaut jamais 1 (il commence à 2) et NombreATester/i ne vaut jamais 1 vu que tu boucles jusqu'à racine(NombreATester) et pas NombreATester
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Tu peux aussi tester une fois le diviseur 2, puis après ne tester que les nombres impairs .
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/02/2008, 22h44
  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, 10h22
  3. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    Réponses: 12
    Dernier message: 18/09/2004, 14h57
  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, 19h10
  5. premier nombre premier superieur à m=10^100+1
    Par azman0101 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 17/04/2003, 03h23

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