begin process at 2012 02 12 20:10:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > NOMBRE_PREMIER

NOMBRE_PREMIER


 Information sur la source

Note :
4 / 10 - par 5 personnes
4,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :nombre, premier, nombrepremier, calcul, 1000000 Niveau :Débutant Date de création :13/07/2006 Vu :9 146

Auteur : yannvag

Ecrire un message privé
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 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/n ombre_premier.php


 Sources du même auteur

Source avec Zip Source avec une capture SIMPLECALENDRIER
TYPE DU FICHER

 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

FONCTION DE CALCUL DU NOMBRE DE DUEL UNIQUE POUR UN NOMBRE N... par mtrix000
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture BMI CALCULATOR par lolosb
Source avec Zip DÉBUTANT : FONCTION POUR TRANSFORMER UN TEMPS EN SECONDES EN... par MonkeyIsBack
Source avec une capture CALCUL DE TVA MARGE AVEC REMISE FOURNISSEUR SPÉCIALE POUR LE... par lcomb

Commentaires et avis

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.

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

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

Commentaire de yannvag le 14/07/2006 17:41:04

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

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

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()

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

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

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)

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

Commentaire de coucou747 le 16/07/2006 16:38:08 administrateur CS

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

c'est une mauvaise solution ça...

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

ça c'est mieux et moins lent

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

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?
  

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 :)

Commentaire de coucou747 le 18/07/2006 13:19:40 administrateur CS

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 [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 Total Calcul Panier [ par jackdaniel9 ] Bonjour, Il faut que je calcule le prix par rapport à la quantité dans un formulaire pour un panier. Je me demandais si il était possible de faire l 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 Tirer un nombre au hazard [ par lolosav ] Bonjouret bonne fêtes à tous !je vous expose mon probléme ! je suis en train de créer un jeu-question ! je vais entrer dans un tableaux un nombre jeu nombre aleatoire en php [ par hiyam ] help ma question et toute en bas celle de 2009 Nombre de connecté sur un serveur [ par Seadol ] Bonjour,Voici ce que je cherche a faire, j'aimerai pouvoir affiché le nombre de connecté sur un serveur ( dans mon cas, je veut affiché le nombre de j compteur de visiteurs php [ par kamy31 ] salut tout le monde,j'ai réalisé un site en php et  j'avais un problème concernat l'insertion de nombre de visiteurs dans ma page d'acceuil php, pour


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 0,936 sec (3)

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