Nombres Premiers

Présentation
Vous entrez un nombre et le programme trouvera tous les nombres premiers compris entre 0 et votre nombre !
Téléchargement
Compatibilité
Linux Mac Windows
0  0 
Téléchargé 268 fois Voir les 8 commentaires
Détails
Éditeur : Kakou35   +
Licence : Autre
Date de mise en ligne : 23 janvier 2017




Avatar de Bousk Bousk - Rédacteur/Modérateur https://www.developpez.com
le 09/06/2012 à 4:30
Avatar de droggo droggo - Expert confirmé https://www.developpez.com
le 09/06/2012 à 13:37
Hoe,

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)
laisse passer tous les nombres, sauf les multiples de 2 ET 5 en même temps !

- 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.
Avatar de Obsidian Obsidian - Responsable Modération https://www.developpez.com
le 09/06/2012 à 13:47
D'accord, il s'agit de trouver les nombres premiers.

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 ! :-)
Avatar de droggo droggo - Expert confirmé https://www.developpez.com
le 09/06/2012 à 14:07
Keo,

C'est ce que je me suis dit aussi, mais j'avais déjà de quoi répondre.
Avatar de munstef munstef - Membre régulier https://www.developpez.com
le 22/12/2014 à 9:15
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; 
}
Avatar de Jean-Marc.Bourguet Jean-Marc.Bourguet - Expert éminent https://www.developpez.com
le 22/12/2014 à 9:47
Garder tous les premiers déjà trouvés mais ne pas s'en servir lors de la recherche des autres?

Passer un vecteur par valeur?

La bonne méthode pour ce problème, c'est le crible d'Erathostène.
Avatar de hastur34 hastur34 - Futur Membre du Club https://www.developpez.com
le 19/08/2015 à 12:00
Une alternative très simple pour calculer les nombres premiers entre 2 et 4 milliards et quelques ...enfin je crois..😉
Sur ma tablette Nexus 10 donne les premiers inférieurs ou égaux à 500000 en moins de 2 secondes[ATTACH]185779d1/a/a/a" />
Avatar de hastur34 hastur34 - Futur Membre du Club https://www.developpez.com
le 19/08/2015 à 12:42
Désolé, je croyais avoir inséré dans PJ mais non😱
Code C : Sélectionner tout
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
  
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
/* 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; 
}
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Contacter le responsable de la rubrique C