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 !

NOMBRE_PREMIER


Information sur la source

Description

Un petit programme qui liste des nombres premiers jusqu'a $limit limite
 

Source

  • <?php
  • //nombre_premier.php
  • $nombres=array(2,3);
  • $nb=4;
  • $limit=11150;
  • while($nb<=$limit)
  • {
  • $nbpremier=true;
  • foreach($nombres as $val)
  • {
  • if($val!=1)
  • {
  • if(gettype($nb/$val) == "integer")
  • {
  • $nbpremier=false;
  • }
  • }
  • }
  • if($nbpremier==true)
  • {
  • $nombres[]=$nb;
  • }
  • $nbpremier=true;
  • $nb++;
  • }
  • echo "Nombres premiers jusqu'a $limit : ";
  • foreach ($nombres as $nb)
  • {
  • echo "<br />\n$nb";
  • }
  • ?>
<?php
//nombre_premier.php

$nombres=array(2,3);
$nb=4;
$limit=11150;
while($nb<=$limit)
{
	$nbpremier=true;
	foreach($nombres as $val)
	{
		if($val!=1)
		{
			if(gettype($nb/$val) == "integer")
			{
				$nbpremier=false;
			}
		}
	}
	if($nbpremier==true)
	{
		$nombres[]=$nb;
	}
	$nbpremier=true;
	$nb++;
}
echo "Nombres premiers jusqu'a $limit : ";
foreach ($nombres as $nb)
{
	echo "<br />\n$nb";
}
?>

Conclusion

Jusqu'ici, il liste jusqu'à 11150. (demande quelques secondes pour exectuter le script).
En effet, pour voir si un nombre est premier, il faut le diviser par les nombres premiers qu'il y avait avant.
Donc au 1 000 000eme nombre premier, il faut qu'il fasse 999 999 calculs !
Cela demande donc un peut de temps.

Pour vous montrer un exemple plus complexe avec mot de charchement, et la limite dans un formulaire, allez voir sur http://yannvag.free.fr/WebProject/nombre_premier/nombre_premier.php
 

Commentaires et avis

signaler à un administrateur
Commentaire de dom_ponge le 13/07/2006 22:44:58

Un peu lent pour l'utilité(on pourrai mettre les nombres premiers dans un fichier .txt et les reprendres dans le fichier à place d'utilisé cette manière)...
Mais pour rajouté de la rapidité tu pourrai regardé si c'est un nombre pair(sauf pour le nombre 2) et si c'est ce l'est tu ne fait pas tout les calculs pour, sa le rendra 2 fois plus rapide!
Pour l'effort je donne 8.

signaler à un administrateur
Commentaire de davwart le 13/07/2006 23:23:33

le code est Ok mais pas du tout du tout optimisé (il y a vraiment plein d'astuces pour trouver si un chiffre X est premier).

- 5/10

signaler à un administrateur
Commentaire de stepibou le 14/07/2006 01:40:34

oué, intéressant :

Chez moi ton code : 14.76s

celui d'en dessous sans le break : 12.57s

celui la : 1.54s

$nombres=array(2,3);
$nb=4;
$limit=11150;
while($nb<=$limit){
foreach($nombres as $val){
   if(gettype($nb/$val) == 'integer'){
$nbpremier=false;
break;
}
}
if($nbpremier==true)
         $nombres[]=$nb;
$nbpremier=true;
    $nb++;
}

Voila presque 10 fois plus rapide,
On voit ici l'importance du break!

on peut encore améliorer,... a vous.
;)

signaler à un administrateur
Commentaire de yannvag le 14/07/2006 17:41:04

Mouais t'as raison, j'avais oublé le break;

signaler à un administrateur
Commentaire de xeonarno le 14/07/2006 18:43:05

Bonjour tous le monde ,

Je vois que hélas vous n'avez pas fait de cours de spécialité math en terminal. En effet en cours d'arithméthique on découvre que pour voir si un nombre est premier, il suffit de calculer sa racine carré et si ce nombre ne possède pas de diviseur entre 2 et sa racine carré alors il est premier.

Pour calculer une racine carré il suffit d'utiliser l'algorithme de Newton qui est très souvent utilisé dans les solutions embarqués à petit puissance de calcul tels que les téléphones portables. je te laisse le soin de le trouver je ne l'ai pas sous la main.(c'est une suite ).

Bien joué stepibou  pour le break, je ne savais pas non plus que ça avait autant d'importance de mettre un break, joli coup d'optimisation ....

Cordialement,

Xeonarno

signaler à un administrateur
Commentaire de Evangun le 14/07/2006 20:02:12

Salut,
pas la peine de réinventer la roue... cf php.net

gmp_prob_prime()

signaler à un administrateur
Commentaire de rrk275 le 15/07/2006 00:48:38

avec mon code j'ai 0.030129 :
<?
$deb = microtime(true);
$limit=11150;
$square = sqrt($limit);
$tab = Array();
for($i=0;$i<=$limit;$i++)
$tab[$i] = true;
for($i=2;$i<=$square;$i+=2)
{
if($tab[$i])
{
for($a=$i;$a<=$square;$a+=$i)
$tab[$a] = false;
}
}
echo microtime(true) - $deb;
?>

mais il est pas encore optimisé au max .. j'ai encore un truc (a essayer) d'ameliorer ..

signaler à un administrateur
Commentaire de rrk275 le 15/07/2006 00:53:36

oups une petite erreur ce n'est pas
for($i=2;$i<=$square;$i+=2)
mais
for($i=3;$i<=$square;$i+=2)

mais les perfs restent egales ( y a trop peu de nombres premiers pour faire la difference ..)

signaler à un administrateur
Commentaire de rrk275 le 15/07/2006 00:56:08

deuxieme erreur (mais moins grave ^^ ) , remplacer for($a=$i;$a<=$square;$a+=$i) par for($a=$i*2;$a<=$square;$a+=$i)

signaler à un administrateur
Commentaire de rrk275 le 15/07/2006 00:57:23

re dsl mais la c'est bon j'ai fais les tests ..  
en fait c'est en for($a=$i*2;$a<=$limit;$a+=$i) qu'il faut remplacer ..

signaler à un administrateur
Commentaire de coucou747 le 16/07/2006 16:38:08

if(gettype($nb/$val) == 'integer'){

c'est une mauvaise solution ça...

if($nb%$val===0){

ça c'est mieux et moins lent

signaler à un administrateur
Commentaire de rrk275 le 16/07/2006 21:54:10

en terme de complexité , ils ont du O(n²) (il parcour  tandis que moi O(n) s'il utilise la racine carré ils tomberont a O(n*sqrt(n)) qui est relativement elevé par rapport au mien .. fin au crible d'ératosthene ^^  

signaler à un administrateur
Commentaire de guill76 le 16/07/2006 23:53:28

En prog web je vois pas trop l'utilité de savoir si un nombre est premier ou non, mais quoi qu'il en soit le raisonnement semble juste: ça vaut pas 4.67 de moyenne, moi je met 7.
Ps J'ai mis 5 par erreur. Malalam, STP, tu peux corriger?
  

signaler à un administrateur
Commentaire de PaDa le 17/07/2006 13:24:23

Remarque sans intérêt : c'est vraiment pas la panacée Xeonarno, ce cours.. même si ca change un peu des trucs stupides qu'on fait le reste de l'année en term' S

Une autre optimisation intéressante, plutot que d'aller de 2 en 2, pour des grands nombres, ca peut être intéressant de faire des sauts réguliers avec les écarts des premiers nombres premiers. Quand on saute de 2 en 2 trois fois de suite, on est fatalement tombé sur un multiple de 3, ce qui est intrinsèquement idiot. Donc on peut comme ca s'éviter des dizaines de tests inutiles.. 'suffit de regarder ca de plus près ensuite :)

signaler à un administrateur
Commentaire de coucou747 le 18/07/2006 13:19:40

guill76, le php n'est pas limité à la programmation web, ce code n'a pas été corrigé, donc selon moi, ça ne vaut pas 4.5 de moyenne, mais beaucoup moins, car autant d'erreurs dans un programme aussi court, c'est inaccèptable!

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

calcul du nombre de samedi par mois [ par justone72 ] Bonjour,Je recherche un script qui permette de calculer le nombre de samedi dans un mois en fonction du mois et de l'ann&#233;e.J'ai recherch&#233; da Calcul avec un nombre avec virgule [ par tweeder ] Bonjour à tous,Est-ce possible d'effectuer des calculs avec des nombres à virgules constituer d'une virgule ?Ex: 4,5 +4,5 = 9 au lieu de 4.5 + 4.5 obtenir la position du premier nombre dans une chaine de caracteres [ par jsuisperdu ] bonjour,je cherche à caluler automatiquement la poisiton de la premiere valeur numérique dans un texte.exemple : "le chien de la voisine a mange 52 ch Calcul de la meilleur note [ par abdoulax ] Mon problème est plus une question d'algorithme que de PHP. J'ai besoin de récupérer les 5 items les mieux noté d'un site. Mais comment avoir un bon r [PHP] Matrice PHP [ par Heikk0 ] Bonjour a tous,   Je dois crée une matrice php en fonction de deux nombre qu'un utilisateur devra introduire sur une premiere pages. Le premier nombre Recherche du premier carractère non numérique [ par fabricioliking ] bonjour, j'ai une petite question de base en phpvoila j'aimerai pouvoir faire une boucle qui me retourne la position du premier carractère non numériq onglet dynamique!!!!!!!!!!! [ par hicham_899 ] bonjour j'ai entrain de chercher comment faire un page web qui contient des onglets(comme site de fnac) dynamique sachant que l' administrateur de sit requête SQL comptabilisant le nombre d'entrée [ par oubien73 ] Bonjour, Je bloque sur un petit problème qui doit être relativement simple, mais je n'arrive pas à trouver la solution :/ J'ai une table (T_achats Ajout d'un '0' en avant d'un nombre [ par jzeel ] Bonjour à tous,J'ai un champ ID qui s'incremente tout seule dans une BD, mais par l'intermediare d'un formulaire je peux aussi appliquer un nombre dep Aidé moi pour realisé ma premier panier [ par sipilto ] Bonjour tous le monde, bon je sui entrain de realisé une panier pour un site de vente en ligne.mai je sais pas comment enregistrer les detail de la cm


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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,718 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é.