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

avec Java Discussion :

Probleme nombre premiers


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [RESOLU] Probleme nombre premiers
    Bonjour à tous, j'essaie d'écrire un petit programme qui affiche les nombres premiers de 1 à 100, j'ai beau relire mon code, la démarche m'a l'air bonne mais quand je l'exécute rien ne se passe

    voici le code (je commence à parcourir les nombres à partir de 2, en sachant que 1 n'est 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
    public static void main (String [] args){
     
            int n=100;
     
            for(int i=2; i<n; i++){             
                for (int j=2; j<i; j++){
                    int div=0;
                    if (i%j==0)              
                    {div=div++;}
     
                    if (div==1)
                    {System.out.println(i);}         
                }
     
                } 
            }

    Merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Salut,

    Déjà remplace div = div++; par div++; ou div = div + 1;

    Ensuite je te laisse regarder le problème suivant =)

    Edit : Penses à la balise code :

    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
    public static void main (String [] args){
     
        int n=100;
     
        for(int i=2; i<n; i++){
            for (int j=2; j<i; j++){
                int div=0;
                if (i%j==0)
                    {div++;}
     
                if (div==1)
                    {System.out.println(i);}
            }
        }
    }

  3. #3
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut Les maths sont tes amies
    Bonsoir,

    tu peux simplifier avec le crible d'Erathostène.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    En effet div=div++, c'était un peu spécial
    J'ai modifié un peu le code et quand je le relis, la methode semble bonne mais il m'affiche seulement 2 et 3


    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
     public static void main (String [] args){
     
            int n=100;
            int div=0;
     
            for(int i=2; i<n; i++){             //on parcourt les nombres i de 2 à 100
                for (int j=2; j<=i; j++){
                    if (i%j==0)              // si le nombre est divisible on incrémente div de 1
                    {div=div+1;}
                }
                    if (div==1)              // si i admet un seul diviseur alors il est premier et on l'affiche
                    {System.out.println(i);
                        div=0;}         
     
     
                } 
            } 
        }

  5. #5
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Le "div=0" mériterait d'être effectué à chaque itération de la boucle i.

    Après, comme dit, ton algo n'est pas optimal.

  6. #6
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut Diviser pour régner
    Bonjour,

    c'est que l'on m'a souvent en dis en info

    En fait, il y a l'astuce très simple qui consiste à faire ce test uniquement avec des nombres impairs, puisque tu sais déjà que tous les nombres pairs ne sont pas premiers puisque divisibles par 2

    Ensuite, la solution est écrite dans la démonstration du crible.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci à tous pour vos réponses, en effet le div=0 devait se répéter à chaque boucle i

  8. #8
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonsoir.

    Sinon, uniquement lorsque le nombre doit être compris entre 1 et 100 (au delà ça ne marche pas), il suffit de s'assurer que le nombre n'est pas divisible par 2, ni par 3, 5 et 7 (lorsqu'il est plus grand que ces derniers).

    Ceci aurait donc suffit à résoudre le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static void main (String [] args)
    {
            int i = 0;
    	System.out.println ("1\n2\n3\n5\n7");
    	for (i = 8; i<=100 ; i++)
    	{
                   if (i%2 != 0 && i%3 !=0 && i%5 != 0 && i%7 != 0)
    	       {
    	            System.out.println (i);
    	       }
    	 }
    }
    Sinon, au delà de 100, il ne doit pas être divisibles par des multiples de ces premiers nombres premiers cités (2, 3, 5, et 7).

  9. #9
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut Quelques rectifications
    Bonjour,

    Sinon, uniquement lorsque le nombre doit être compris entre 1 et 100 (au delà ça ne marche pas), il suffit de s'assurer que le nombre n'est pas divisible par 2, ni par 3, 5 et 7 (lorsqu'il est plus grand que ces derniers).
    ,

    Alors voilà comment cela fonctionne : dans la démonstration du crible, on montre que la recherche des nombres premiers inférieurs à n est équivalente à la recherche des nombres premiers inférieurs à racine carrée de n.

    Ainsi, on a sqrt(100)= 10, on recherche donc avec 2, 3, 5 et 7 <= 10.
    Si l'on avait eu n=170, on aurait fait une recherche avec 2, 3, 5, 7, 11 et 13

    Sinon, au delà de 100, il ne doit pas être divisibles par des multiples de ces premiers nombres premiers cités (2, 3, 5, et 7).
    C'est une conditions nécessaire, mais loin d'être suffisante, puisqu'on a par exemple 11x11 n'est pas divisible par 2, 3, 5 ou 7 et n'est pas premier.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 24
    Dernier message: 27/09/2005, 21h16
  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