Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRIBLE D'ÉRATOSTHÈNE - LES NOMBRES PREMIERS


Description

Voilà une source fait en vitesse pour trouver si un nombre est premier d'une facon très rapide grace au crible d'Ératosthène.
La raison de cette source ?
http://www.phpcs.com/codes/SPIRALE-ULAM-NOMBRES-PREMIERS_42487.aspx
Possaidait une facon de calculer un nombre premier juste, mais un peut lent a mon gout.

Source du crible :
http://fr.wikipedia.org/wiki/%C3%89ratosth%C3%A8ne
 

Source

  • <?php
  • // Crible d'Ératosthène
  • //Tableau du crible
  • $Nombres_Premiers = array();
  • function Cree_Crible($Max)
  • {
  • global $Nombres_Premiers;
  • if($Max < 2) return 0;
  • //Par défaut, tous les nombres sont premiers
  • for($n = 2 ; $n <= $Max ; $n++)
  • $Nombres_Premiers[$n] = TRUE;
  • // Sauf pour 0 et 1
  • $Nombres_Premiers[0] = $Nombres_Premiers[1] = FALSE;
  • // On raye les nombres non premiers
  • for($n = 2 ; $n <= $Max ; $n++)
  • {
  • if($Nombres_Premiers[$n] === TRUE)//Si le nombre est premier
  • for($Multiple = 2 ; ($Multiple * $n) <= $Max ; $Multiple ++)//Pour tous ses multiples
  • $Nombres_Premiers[$Multiple * $n] = FALSE;//On les concidèrent non premiers
  • }
  • return 1;
  • }
  • function est_premier($Nombre)
  • {
  • global $Nombres_Premiers;
  • return (bool)$Nombres_Premiers[$Nombre];
  • }
  • Cree_Crible(65000);
  • echo 'Nombres premier entre 0 et 65000 :<br/>'."\n";
  • for($i = 0 ; $i <= 65000 ; $i++)
  • if(est_premier($i))
  • echo $i."<br/>\n";
  • ?>
<?php
// Crible d'Ératosthène

//Tableau du crible
$Nombres_Premiers = array();

function Cree_Crible($Max)
{
  global $Nombres_Premiers;
  
  if($Max < 2) return 0;
  
  //Par défaut, tous les nombres sont premiers
  for($n = 2 ; $n <= $Max ; $n++)
  	$Nombres_Premiers[$n] = TRUE;
  // Sauf pour 0 et 1
  $Nombres_Premiers[0] =  $Nombres_Premiers[1] = FALSE;
  // On raye les nombres non premiers
  for($n = 2 ; $n <= $Max ; $n++)
  	{
		if($Nombres_Premiers[$n] === TRUE)//Si le nombre est premier
			for($Multiple = 2 ; ($Multiple * $n)  <= $Max ; $Multiple ++)//Pour tous ses multiples
				 $Nombres_Premiers[$Multiple * $n] = FALSE;//On les concidèrent non premiers
	}
 return 1;
}

function est_premier($Nombre)
{
	global $Nombres_Premiers;
	return (bool)$Nombres_Premiers[$Nombre];
}


Cree_Crible(65000);
echo 'Nombres premier entre 0 et 65000 :<br/>'."\n";
for($i = 0 ; $i <= 65000 ; $i++)
	if(est_premier($i))
		echo $i."<br/>\n";
?>

Conclusion


Défaut :
Pour trouver si un grand nombre est premier, il faudra passer dabord par tous les autres.

Avantages :
Très rapide lorsqu'on veut tester plusieurs nombre en quelques "nanosecondes"
Un crible peut être enregistrer et réutiliser.
  ex : Si vous utilisez ceci dans un site, vous pouvez générer un fichier allant de 0 à 100 000, puis le réutiliser pour toutes les demandes de nombres premier.


Code débutant, rien d'extraordinaire, juste de la logique ...
 

Commentaires et avis

signaler à un administrateur
Commentaire de maili20 le 30/04/2007 14:19:54

merci bcp pour le sujet continue

signaler à un administrateur
Commentaire de coucou747 le 03/05/2007 10:48:23

pour le crible, tu dois t'arreter a la racine du max.... pas au max....

bref, t'as fait un algo vraiment lent pour un crible

signaler à un administrateur
Commentaire de CChargy le 11/05/2007 20:53:46

Peux-tu donner un exemple sur internet que l'on voit l'efficacité de ton script ...
De plus, Coucou747 a raison ...
Bonne chance

Colin CHARGY

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

MySQL - Ordonner des nombres [ par psychodingue ] Alors voilà mon prob:Je voudrai ordonner par ordre inverse des nombres, alors j'me connecte à ma base de donner puis je fait:ORDER BY clics DESCJe fou Splitter un texte en nombres [ par JMGR ] Je cherche à stocker les forum déja vus par les utilisateurs d'un forum que je crée, mais je ne désire pas utiliser le cookies qui sont je trouve, com Nombres entier [ par ekinoks ] he... escusé moi mais he .... comment on fait pour avoir que les nombres entier de nombres decimoexemple :&lt;?$truk = 3/2;echo $truk; //g envi qeu ic plus rapide que msql_result [ par Isengard ] Bonjour a tous.Je me rappelle avoir vu qqpart (oui oui) qu'il existait un moyen plus rapide que mysql_result.Par exemple j'ai une toable ou chaque lig Grille de nombres [ par Tomcube ] Salu,J'shui en train de faire un script de loto.A peine commencé, déjà un truc qui m'énerve : la grille de nombres. Je veux faire la même grille que s Nombres de jours entre 2 dates! [ par jimmy69 ] Bonjour a tous,Voila j'ai un p'tit stress ....si quelqu'un pouvait m'aider!En fait j'enregistre mes donnees ds une table mysql , des donnees comme le récupérer les 7 premiers chiffre de l'IP [ par pyranhaz ] Bonjour,J'aimerais pouvoir récupérer seulement les 7 premiers chiffres de $REMOTE_ADDR;C'est possible ???mon script anti-aspirateur serait davantage e Suite de nombres [ par jak123 ] Bonjour, j'ai codé une page photos, mon seul hic c'est que j'aimerai que mon chiffre 1 sur mon code ci-dessus, prenne les valeurs de 1 au nombre que j Chaine de caractère [ par dao85 ] BonjourJe débute juste en PHP et, après avoir écrit mes premiers scripts, je me heurte à un problème.Je souhaite simplement extraire les 5 premiers ca définir un répertoire par défaut pour un upload rapide [ par skmancuso ] Bonjour,Je souhaiterais savoir s'il y a un moyen quelconque de d&#233;finir un r&#233;pertoire par d&#233;faut avec la balise input type=file.Je suis


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.