Forum Clubic

Nombres premiers

salut
je veu afficher les 4 nombres premiers entre 0 et 10 (2 3 5 7 )
mai j arrive pa a trouvé ou est le probléme :frown:

public class nbpr {

public static void main(String[] args) {
	
int i,nb;

int ct=0;

for(nb=1;nb<=10;nb++){

for(i=1;i<=nb;i++){

	if( nb % i == 0)
		
		ct=ct+1;
		
		}
		
		if(ct==2)
		
			System.out.println(nb);
			
			}
}

}

merci
Edité le 02/08/2007 à 13:21

Regarde à quel endroit tu réinitialises ta variable ct

Peux tu s’il te plait changer le titre de ce sujet par quelque chose de plus explicite?

–> il te suffit de cliquer sur le bouton Editer à gauche de ton message.

ok ca va
je sai que c po qlq chose ce sujet
merci pr vs réponce

Bonjour,



public class NombrePremier{

   public boolean isPremier(int nombre){
     int ct=0;
     for(int i=1;i<=nb;i++){
         if( nb % i == 0){
    		//incrémente le nombre de facteur pour ce nombre
    		ct=ct+1;
    	}
     }
    // le nombre est primier si on a 2 facteurs: 1 et soit même.
    return (ct==2);
    
    }
  }

   
    
    public static void main(String[] args) {
    	
    int nb;
    for(nb=1;nb<=10;nb++){
      if (isPremier(nb)){
         System.out.println(nb+" est Premier");
      }
    
  
}


J’ai un peu tout tranformé à cause de quelques règles de base:

  • nommage: utiliser une majuscule pour le nom de Classe, et de préférence des noms entiers et signifiants
  • découpage: découper au maximum en fonction pour limiter les impact d’un morceau de code sur un autre, et aussi pour la lisibilité: là ça permet de corriger le code: il faut initialiser ct pour chaque nombre (on calcule le nombre de fateur pour chaque nombre)

il resterai 2-3 autre choses à faire:
-le static: il faut instancier un objet et travailler de préférence dans les instances pour ne plus avoir à utiliser le “static”
-optimisation: l’algo n’est pas optimal pour calculer les nombres premiers mais bon…

Sinon, ton algorithme n’est pas le bon (peut mieux faire en complexité) :

boolean estPremier(long n) {
  if (n == 1 || n == 2) return true;
  if ((n%2) == 0) return false;
  long sqrt = (long) Math.sqrt(n);
  for (long i = 3; i <= sqrt; i += 2) {
    if (n%i == 0) return false;
  } 
  return true;
}

Tous les nombres multiples de 2 (sauf 2 bien sûr) ne sont pas premiers.

Amuses toi : fr.wikipedia.org…
Edité le 02/08/2007 à 14:05

merci
:smiley:
pour vos reponces,:mai ce que je veu savoire pour koi mon code marche pas ??:heink:
je pence que un nombre premier c est un nombre divisable sur lui meme et 1 pa plus :paf:
mon idé etai de fixé un element et faire la division sur les autres elements; si le rest d une division d un element sur les autres egale 0 2 fois pa plus ni moins je l affiche :sol:
mai le blém c est qu il maffiche rien ??

Je ne sais pas pourquoi il ne marche pas, parce que :

  1. tu ne précises pas le problème, donc je ne sais pas ce qui ne marche pas
  2. tu ne précises pas tes buts exactement, et là où tu en es arrivé.

estceque mon algo est corect ?
merci
Edité le 02/08/2007 à 22:30

1- Ton problème est dans la variable ct : tu la fais bien “monter”, mais jamais tu ne la remets à zero pour le test suivant, donc peu de chance que tu retombes sur la valeur 2
2- Pour être sûr que ton affichage fonctionne, fais lui afficher quelque chose (autre chose) si la condition n’est pas respectée (tu effaceras cette ligne après)

merci gcc mnt je voie le probléme merci a ts:D

mnt ça marche merci gcc :jap:
j ai regler le probléme on initialise chaque fois le conteure ct avant de faire la division :icon_biggrin:

public class fact {

public static void main(String[] args) {
	
int i,nb;




for(nb=1;nb<=100;nb++){
int ct=0;
for(i=1;i<=nb;i++){

	if( nb % i == 0)
	
		
		ct=ct+1;
		
	
		}
		
		if(ct==2)
		
			System.out.println(nb);
			
			}
}

}
ça marche niickééél merci