begin process at 2012 02 15 09:58:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CRIBLE D'ÉRATOSTHÈNE - LES NOMBRES PREMIERS

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-P REMIERS_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%A8 ne

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 ...


 Sources du même auteur

Source avec Zip Source avec une capture AFFICHER UNE IMAGE SANS IMAGE (GRÂCE AUX URI)
Source avec Zip SERCACHE2 > CACHE DE PAGES, D'OBJETS, DE REQUÊTES ... (NON T...
Source avec Zip SURCHARGE DE LA CLASSE RECURSIVEDIRECTORYITERATOR POUR RÉCUP...
Source avec Zip SERSESSIONS > CLASS PHP5 POUR GERER LES SESSIONS SIMPLEMENT ...
Source avec Zip SERTPL > CLASS PHP5 POUR GERER LES TEMPLATES SIMPLEMENT

 Sources de la même categorie

EXEMPLE D'APPLICATION DE L'ALGORITHME DE DIJKSTRA EN PHP par philtr8
CLEF POUR EAN 13 ET 14 par RaftY
FONCTION DE CALCUL DU NOMBRE DE DUEL UNIQUE POUR UN NOMBRE N... par mtrix000
Source avec Zip Source avec une capture TRIANGLE DE PASCAL ET SON ÉQUATION par vendeeHdLR89
Source avec Zip CONVERTISSEUR LAMBERT2 ÉTENDU EN COORDONNÉE GÉOGRAPHIQUE (LO... par varfendell

 Sources en rapport avec celle ci

Source avec Zip SYSTEME DE CONNEXION IDENTIFIANT + LOGIN par divx78340
STRINGBUILDER / STRINGBUFFER EN PHP (CLASSE SPÉCIALEMENT CON... par Donald_Duck
Source avec Zip Source avec une capture SPIRALE D'ULAM ( NOMBRES PREMIERS ) par jodzi
TABLEAU DE NOMBRES ENTIERS ALÉATOIRES, TOUS DIFFÉRENTS OU NO... par BreakingCentral
DECOMPOSITION D'UN NOMBRE EN PUISSANCES DE FACTEURS PREMIERS... par DarkTyranus

Commentaires et avis

Commentaire de maili20 le 30/04/2007 14:19:54

merci bcp pour le sujet continue

Commentaire de coucou747 le 03/05/2007 10:48:23 administrateur CS

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

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

Commentaire de peter4567 le 26/12/2009 07:37:13

Coucou747 a raison : tout nombre non premier n admet un diviseur premier p tel que n<=p², cela limite considérablement la durée d'exécution du script.
Je ne vois pas d'autre part comment déterminer si un nombre est premier sans passer par ses prédécesseurs puisqu'on applique la propriété ci-dessus pour le savoir : il n'existe pas de formule définissant la suite des nombres premiers.

 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,527 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales