0
0
Nombres Premiers
Je vous propose un nouvel élément à utiliser : Nombres Entiers
Vous entrez un nombre et le programme trouvera tous les nombres entiers compris entre 0 et votre nombre!
Qu'en pensez-vous ?
:calim2:
Quel est l'intérêt ?
En plus, la recherche des premiers est loin d'être optimale :
- On cherche de 0 à N, or un nombre < 2 ne peut pas être premier
- le test
| Code : | Sélectionner tout |
if(nombre % 2 != 0 || nombre % 5 != 0)
- Puis, on va faire le test de division avec tous les nombres < N, donc y compris les nombres pairs.
- Et cette fonction trouve 1 comme premier !
Bref, copie à revoir d'urgence.
Parce que là, il y a écrit « nombres entiers ». Trouver tous les nombres entiers entre 0 et n, c'est sympa mais ce n'est pas difficile ! :-)
C'est ce que je me suis dit aussi, mais j'avais déjà de quoi répondre.
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | bool est_premier(int nombre)
// verifie si nombre est multiple 2 ou 3 puis verifie si nombre est multiple de p = 6 i ± 1 tant que p * p <= nombre
{
if (nombre < 2) return false;
int p = 2;
int s = 1;
int i = 0;
while (p * p <= nombre) {
if (nombre % p == 0) return false.
if (p == 2) ++p; else {if (s == 1) ++i; p = 6 *i + (s = - s);}
}
return true;
} |
Sur ma tablette Nexus 10 donne les premiers inférieurs ou égaux à 500000 en moins de 2 secondes[ATTACH]185779d1/a/a/a" />
Désolé, je croyais avoir inséré dans PJ mais non😱
#include
#include
#include
/* Générateur de nombres Premiers */
/* Inférieurs ou égaux à 4294967295 */
/* Auteur : Lemariey Jean-Philippe */
int main(int argc, char *argv[])
{
div_t resultat;
int i = 3;
int j = 1;
int n = 0;
int r = 0;
double m = 0.0;
printf
("Ceci est un générateur de nombres Premiers inférieurs ou égaux à N \n");
printf("Votre valeur de N svp : ");
scanf("%i", &n);
printf("\n 2 ");
while (i <= n)
{
j = 2;
resultat = div(i, j);
r = resultat.rem;
m = sqrt((double)i); // pas la peine de chercher au delà de
// racinecarrée i
while (j <= m && r != 0)
{
j++;
resultat = div(i, j);
r = resultat.rem;
}
if (j > m)
{
printf("%d ", i);
}
i += 2; //On ne teste que les nombres impairs
}
return 0;
}
En C++, de nos jours, une table de nombres premiers, ça se calcule à la compilation
(enfin, je ne suis pas sûr que ce soit possible, en fait. Avis aux amateurs de défis).