Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lister les nombres premiers entre 1 et une limite

Lister les nombres premiers entre 1 et une limite definie par l'user

Sujet résolu
    24 mars 2019 à 14:38:04

    Bonjour.

    Je suis vraiment débutant en Java, l'un des exercices que je dois faire, est de lister tous les nombres premiers entre 1 et une limite définie par l'utilisateur.

    Selon moi, je devrai utiliser une boucle for.

    Je pars de la condition d'afficher le nombre si chaque nombre moins -1 (soit l’incrémentation) a un modulo de zéro.

    Cependant, le programme n'affiche que 2.

    Qu'est ce qu'il manque dans mon code pour lister tous les nombres premiers.

    Ci-dessous le code :

    public class Prime
    {
       public static void main(String[] args) 
       {
          java.util.Scanner in = new java.util.Scanner (System.in);
          System.out.println("Find below the prime numbers until the limit you will define for a number strictly higher than one");
          System.out.println("Please define the limit");
          int n = in.nextInt();
          int number = 0 ;
          
           System.out.println  ( "1" ) ;
          for ( int i = 2 ; i <= n ; i++ )
          {
             number = n - i ;
             
             if ( number % i == 0 )
             {
                    System.out.println ( i ) ;
             }
    
           }
           
       }
    }
    

    Je précise que je ne connais pas la fonction return (ce que je vois sur bcp de forums)

    Merci de votre aide et soyez indulgents je débute :)

    -
    Edité par MikaelLévy 24 mars 2019 à 15:11:35

    • Partager sur Facebook
    • Partager sur Twitter
      24 mars 2019 à 17:14:22

      Bonjour,

      As-tu déjà étudié les fonctions en Java ? Je te propose de commencer par écrire le principal : le test de primalité.

      Voici la structure dans un premier temps :

      public class Prime
      {
      	public static void main(String[] args) {
      		System.out.println(estPremier(-14)); // affiche false
      		System.out.println(estPremier(-1)); // affiche false
      		System.out.println(estPremier(0)); // affiche false
      		System.out.println(estPremier(1)); // affiche false
      		System.out.println(estPremier(2)); // affiche true
      		System.out.println(estPremier(3)); // affiche true
      		System.out.println(estPremier(7000109)); // affiche true
      		System.out.println(estPremier(15616548)); // affiche false
      	}
      
      	public static boolean estPremier(final int nombre) {
      		return false;
      	}
      }
      Peux-tu écrire le corps de la fonction estPremier() ?

      -
      Edité par Loxort 24 mars 2019 à 17:21:34

      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2019 à 18:43:03

        Bonjour,

        Il faut créer un compteur pour savoir si le nombre est divisible par lui-même et par 1. Comme ça :

        int counter=0; 	  
              for(number =i; number>=1; number--)

        Si le compteur indique 1 c'est que ton nombre n'est pas premier et si il indique 2 c'est un nombre premier (divisible par 1 et par lui-même).

        • Partager sur Facebook
        • Partager sur Twitter
          27 mars 2019 à 10:45:31

          J'ai trouve ce programme sur internet mais je ne comprends pas le principe de compteur, pourquoi doit-on utiliser une boucle dans une boucle.
          public class Prime
          {
             public static void main ( String [] args ) 
             {
                java.util.Scanner in = new java.util.Scanner (System.in);
                System.out.println("Find below the prime numbers until the limit you will define for a number strictly higher than one");
                System.out.println("Please define the limit");
                int n = in.nextInt();
                int number = 0 ;
                String prime = "";
                int i = 0;
                
                for ( i = 1 ; i <= n; i++ )  	   
                { 
                   int counter=0; 		  
                   for( number = i ; number >= 1; number--)
                   {
                      if( i % number == 0 )
                      {
                         counter = counter + 1;
                      }
                   }
                   if ( counter == 2 )
                   {
                      prime = prime + i + " ";
                   }
                }
                System.out.println("Prime numbers from 1 to n are :");
                System.out.println(prime);
             }
          }
                 
             
          
          

          -
          Edité par MikaelLévy 27 mars 2019 à 10:50:26

          • Partager sur Facebook
          • Partager sur Twitter
            27 mars 2019 à 11:02:55

            Lu'!

            Pour avoir les entiers premiers entre 1 et une borne, le plus simple est d'utiliser le crible d'Eratosthène. Pour faire court : le principe est d'utiliser les nombres premiers déjà connus pour calculer si les nombre suivants le sont. Je te conseille de faire une recherche à ce propos. C'est très simple à écrire et très efficace (bien plus que répéter des tests de primalité).

            • Partager sur Facebook
            • Partager sur Twitter

            Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

              27 mars 2019 à 12:50:04

              Bonjour,

              Dans la première boucle, on parcourt tous les chiffres jusqu'au nombre entré. Ensuite, en fonction du chiffre on va le parcourir en sens inverse pour  tester le modulo et voir le reste de la division.

              Si le reste de la division est nulle, on augmente le compteur de 1 (counter = counter + 1;) et si le reste de la division est 2 fois nulle on augmente de compteur de 2. Exemple avec le chiffre 5 : 5%5==0, vrai et incremente le compteur,  5%4==0, faux, 5%3==0, faux, 5%2==0, faux, 5%1==0, vrai et incremente le compteur.

              Enfin, lorsque le nombre a activé 2 fois le compteur car il a été divisé par 1 et par lui même c'est que c'est un nombre premier.

              public class School
              {
                 public static void main(String[] args)
                 {
                    Scanner in = new Scanner (System.in);
                    System.out.println("Trouver la liste des nombres entiers inférieurs au nombre donné.");      
                    int number = 0 ;
                    String  nombrespremiers = "";
                    
                    System.out.print("\nDéfinir la limite : ");
                    int n = in.nextInt();
                    in.close();
                     
                     
                    for ( int i = 1 ; i <= n ; i++ )//parcours tous les chiffres jusqu'au nombre entré
                    {
                  	  int counter=0; 	
                  	  
                        for(number =i; number>=1; number--)//on parcours le nombre i en sens inverse 
              	  {
                  	  if(i%number==0) // on divise i par les nombres inférieurs ou égaux à lui-même.Si le reste de la division du modulo est 0 on augmente le compteur de 1
               	     {
                		counter = counter + 1;//permet de continuer la boucle contrairement à counter = 1
               	     }
               	  }
               	  if (counter ==2) // Si le nombre est divisible 2 fois (par 1 et par lui-même)  c'est un nombre premier. Exemple :
               		              //5%5==0, vrai et incremente le compteur,  5%4==0, faux, 5%3==0, faux, 5%2==0, faux, 5%1==0, vrai et incremente le compteur
               		 		 		
               		
               	  {
               	     //On ajoute le nombre entrée premier à la variable "nombrespremiers"
               		 nombrespremiers = nombrespremiers + i + " "; //  System.out.println ( i ); fonctionne aussi
               		 
               	  }	
                      }	
                      System.out.println("\nles nombres premiers de 1 à " +n+ " sont:");
                      System.out.println(nombrespremiers);
                      



              -
              Edité par Nemo404 27 mars 2019 à 13:16:38

              • Partager sur Facebook
              • Partager sur Twitter
                31 mars 2019 à 20:37:13

                Merci beaucoup Nemo

                C'est plus clair :)

                • Partager sur Facebook
                • Partager sur Twitter

                Lister les nombres premiers entre 1 et une limite

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown