Bah voila c'est mon premier prog. en java ,c'est une adaptation d'un code basic qui utilisait des label, des goto,...donc j'ai remplacé en trichant un peu sur la boucle while...Le principe c'est de tester pour chaque nombre ( en fait tous les 2 car a part le 2et le 3, il n'existe pas 2 nbres premiers consecutifs) en verifiant si il est divisible par un nombre premier au prealablement trouvé inferieur a sa racine carrée ( c'est une prop. math. ) Si il n'est pas divisible, c'est un nombre premier.Attention!!Il ne donne pas le 2.Il créé un fichier nombre.txt et y mets les nombres trouvés ( a ne pas ouvrir avec notepad, ca marche pas je sais pas pkoi )
a titre d'exemple, j'ai calculé 1 000 000 de nombres premiers en 10 min, ca ma fait un fichier txt de 8 Mo!!!
Source / Exemple :
import java.io.*;
class Nbprem {
public static void main(String[] argv) throws IOException {
int Depart;
Depart = demander("Combien de nombres?");
// On ouvre le fichier nombre.txt en ecriture
Ecriture Sortie= new Ecriture();
// On cree un tableau
int[] Tab = new int [Depart];
// Quelques variables...
int Z = 1;
int N = 3;
int X =0;
Tab[1]=2;
// On rentre dans une boucle infinie mais avec remise a zero de X
while ( X < (Z+1) ) {
if ( X > Depart ) { System.exit(0); };
X =X + 1;
// On prepare la difference
int Entier = N / Tab[X];
double Num = (double)N;
double Denom = (double)Tab[X];
double Decimal = Num / Denom;
// Si N est divisible par l'un des nombres premiers deja trouvé...
if (Decimal - Entier == 0) {
// ...on l'incremente de 2...
N = N + 2;
// ...et on repart pour un tour!
X = 0;
}
// Si l'eventuel diviseur de N testé depasse sa racine caree alors N est premier
else if ( Tab[X] > Math.sqrt( N ) ) {
Z = Z +1;
if ( Z > Depart ) { System.exit(0); };
// On le mets dans notre tableau...
Tab[Z] = N;
//...et on le stocke dans nombre.txt;
String Premier = String.valueOf(N);
Sortie.ecrire(Premier + "|" );
// et on repart pour un tour!!
N = N + 2;
X = 0;
}
}
}
public static int demander(String s) {
int f = 0;
System.out.print(s);
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
try {
f = (new Integer(br.readLine())).intValue();
}
catch (IOException e) {
System.out.println("Erreur de lecture.");
}
return f;
}
}
class Ecriture {
public void ecrire(String texte)
{
String adressedufichier = System.getProperty("user.dir") + "\\nombre.txt";
try
{
FileWriter fw = new FileWriter(adressedufichier, true);
BufferedWriter output = new BufferedWriter(fw);
output.write(texte);
output.flush();
output.close();
}
catch(IOException ioe){System.out.println("erreur : " + ioe );}
}
}
Conclusion :
Voila normalement j'ai pas fait d'erreur en recopiant :-))
On pourrait catcher l'erreur du tableau, ce serai plus joli, et aussi utiliser du big int pour repousser les limites du prog ( enfin bon je vais pas lancer le prog pour la nuit ).
Merci a mon prof de maths qui ma mis recemment au java, c'est super!!
Envoyé vos commentaires et/ou vos ameliorations, merci!
n.iz@wanadoo.fr
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.