Calcul de nombres premiers

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 563 fois - Téléchargée 27 fois

Contenu du snippet

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

A voir également

Ajouter un commentaire

Commentaires

niiizzzz
Messages postés
5
Date d'inscription
mercredi 11 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2003
-
c'est normal!!Regarde le code!!C'est pourquoi je proposai d'attraper cette erreur avec un try ... catch mais je debute et je ne sais quelle erreur est a attraper. De tte facon, ca ne gene pas le bon fonctionnement du prog.
Le fait de changer la taille du tableau ne change rien puisque on le defini a partir de la valeur entrée ( c'est les 2 premieres lignes du code...faut regarder) et qu'on calcule jusqu'a sa fin dans tt les cas.
J'espere que tu a mieux compris le pourquoi du comment
Neozix
Messages postés
33
Date d'inscription
mercredi 27 février 2002
Statut
Membre
Dernière intervention
25 avril 2003
-
c'est dommage, l'idée de base est bonne, la sortie dans un fichier. Mais bon que je mettes 200, 20 ou 10 chiffres il y a chaque fois des outofboundexceptions....

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.