1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
//MINI PROJET NOMBRES PREMIERS
public class ProjetNombresEntiers
{
public static void main (String [] args )
{
afficheNpremiers(12);
}
//un nombre entier p divise un nombre entier q si le reste de la division entiere de p par q est zero.
//a)écrire une fonction booléene qui, etant donnés deux entier strictement positif p et q, test si p divise q.
public static boolean divise (int p, int q) // la fonction est booléenne, d' où le type boolean de la fonction que j' ai appelé divise
{
boolean verite = false; // création de la variable booléenne (verite) qui sera retournée puis son initialisation à false
if(p%q == 0) // si p modulo q (reste de la division de p par q) est égale à zéro
{
verite = true; // alors la variable booléenn est vrai. Car dans ce cas, p divise q
}
else // sinon,
{
verite = false; // c' est faux, d' où false
}
return verite; // retouner la variable booléenne
}
// b) Ecrire une fonction qui, etant donné un entier p, rend le nombre de diviseur de p. exemple:12 a 6 diviseur:1,2,3,4,6,12
public static int nombreDiviseurs(int p)
{
int nbreDiv = 2; //Parce qu' un nombre entier a forcément au moins 2 diviseurs. Sauf le nombre 1. D' où la ligne suivante.
if (p == 1) // Donc, dans le cas où p = 1
{
nbreDiv = 1; // nombre de diviseurs = 1. Evidement !
}
else // Autrement (si p différent de 1)
{
// on parcours tous les nombres de 2 à un nombre inférieur à p (parce que 1 et p sont déjà comptés ((voir première ligne int nbreDiv = 2;)
for (int i = 2; i < p; i++)
{
if(p % i == 0) // si un de ces nombres est un diviseur de p
nbreDiv++; // alors, augmenter de 1 le nombre de ces diviseurs
}
}
return nbreDiv; // retourner (ou rendre) le nombre de diviseurs trouvés.
}
// c) Un nombre est premier s'il n'est divisible que par 1 et par lui meme. exemple:13 est premier ,21 ne l'est pas.
// Ecrire une fonction isPremier en utilisant la fonction de b.
public static boolean isPremier(int p)
{
boolean verite = false; // création de la dariable booleenne
// La fonction b) donne le nombre de diviseurs d' un entier p
if(nombreDiviseurs(p) == 2) // Si cenombre est inférieur ou égal à 2
{
verite = true; // alors, ce nombre est premier
}
else // autrement,
{
verite = false; // ne nombre n' est pas premier
}
return verite; // retourner la booléenne, évidement
}
// d. En fait, si l'on trouve un diviseur pour un nombre p qui est différent de 1 et de p, on peut en déduire immédiatement que p n'est pas premier.
// Ecrire une fonction isPremier utilisant cette propriété.
public static boolean isPremier2(int p)
{
boolean verite = false; // création de la dariable booleenne
if(p == 1)
{
verite = false; //Car 1 n' est pas un nombre premier
}
else // autrement
{
for(int i = 2; i < p; i++) // de tous les nombres compris entre 2 et un nombre inférieur à p
{
if(p % i == 0) // si p divise un de ces nombres
{
verite = false; // alors p n' est pas premier car p est premier seulement s' il divise 1 et lui même
break; // sortir de la boucle car on a déjà trouvé un diviseur différend de 1 et de p
}
else
verite = true;
}
}
return verite; // retourner la booléenne, évidement
}
//e. Améliorer en ne considérant comme diviseurs que le nombre 2 et les nombres impairs (en effet si un nombre n'est pas divisible par 2, il ne sera divisible
// par aucun nombre pairs !)
public static boolean isPremier3(int p)
{
boolean verite = false; // création de la dariable booleenne
if(p == 1)
verite = false;
if(p == 2)
verite = true;
int reste = (p % 2); // la variable reste = reste de la division de p par 2
switch(reste)
{
case 0: // au cas où ce reste = 0, p est divisible par 2
verite = false; // p ne peut donc plus être premier
break;
default:// dans l' autre cas (forcément reste = 1) p n' est pas divisible par 2
for(int i = 2; i < p; i++)
{
if(i % 2 == 0) // si i est un multiple de 2
continue; // ne pas en tenir compte. Donc continuer à la valeur suivante. Car p n' est pas divisible par tous les multiples de 2
if(p % i != 0) //
verite = true;
else
verite = false;
}
break;
}
return verite;
}
}
/*
MINI PROJET NOMBRES PREMIERS
Un nombre entier p divise un nombre entier q si le reste de la division entière de p par q est zéro.
a. Ecrire une fonction boolenne qui, étant donnés deux entiers strictement positifs p et q, teste si p divise q.
b. Ecrire une fonction qui, étant donné un entier p, rend le nombre de diviseurs de p.
exemple : 12 à 6 diviseurs : 1,2,3,4,6,12
c.Un nombre est premier s'il n'est divisible que par 1 et par lui-même.
exemple : 13 est premier , 21 ne l'est pas.
Ecrire la fonction isPremier en utilisant la fonction de b.
d. En fait, si l'on trouve un diviseur pour un nombre p qui est différent de 1 et de p, on peut en déduire immédiatement que p n'est pas premier.
Ecrire une fonction isPremier utilisant cette propriété.
e. Améliorer en ne considérant comme diviseurs que le nombre 2 et les nombres impairs (en effet si un nombre n'est pas divisible par 2, il ne sera divisible
par aucun nombre pairs !)
f. Améliorer en arretant les tests lorsque le diviseur dépasse la racine carrée de n. (en effet, si un diviseur de p est supérieur à la racine carrée de n, le quotient est donc inférieur à n et aura été trouvé avant).
g. Ecrire une fonction affichant la liste des n premiers nombres premiers inférieurs à partir de 2..
*/ |
Partager