Fonction qui vérifie si l'argument est un nombre premier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 848 fois - Téléchargée 771 fois

Contenu du snippet

Permet de déterminer si l'argument passé à la fonction est un nombre premier en se basant sur la définition d'un nombre premier (divisible par 1 et par lui même)

Source / Exemple :


function is_prime($_nombre)
{
	if(((int) $_nombre === $_nombre ) && $_nombre > 1)
	{
		//Calcul de la racine du nombre
		$sqrt = sqrt($_nombre);
		
		//Si le nombre est multiple de 2
		if($_nombre % 2 == 0)
        {
			return false;
		}
        
        //Si la racine du nombre est entière
        elseif((int)$sqrt === $sqrt)
		{
			return false;
		}
		
		//On vérifie que la division de tous les nombres compris entre 3 et la racine est entière
		for($i = 3; $i < $sqrt; $i+=2)
		{
			//Si la division est entière
			if((int) ($_nombre/$i) === $_nombre)
            {	
				return false;
				break;
			}	
		}
		
		//Alors le nombre est premier
		return true;
	}
	
	//Hors limite de PHP
	else
	{
		return	'(Attention le resultat est faux : veuillez entrer un entier compris entre 2 et '.PHP_INT_MAX.') ';
	}

}

Conclusion :


Pour plus d'informations sur les nombres premiers : http://fr.wikipedia.org/wiki/Nombre_premier

A voir également

Ajouter un commentaire Commentaires
florianf. Messages postés 3 Date d'inscription vendredi 14 août 2015 Statut Membre Dernière intervention 16 août 2015
16 août 2015 à 00:41
La fonction dit que 0 et 1 sont premiers et 2 ne l'est pas. C'est le contraire.
La fonction dit que 9 n'est pas premier parce que le test sur $sqrt est fait avec === et pas ==.
florianf. Messages postés 3 Date d'inscription vendredi 14 août 2015 Statut Membre Dernière intervention 16 août 2015
16 août 2015 à 00:33
sauf que il y a un return avant le break. Le break n'est jamais exécuté.
kertimanoff Messages postés 75 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 30 juin 2013
19 août 2010 à 11:59
en tout cas merci a tous pour ce moment de rêve que j'ai passé a lire les commentaires de cette source
lynxtyle Messages postés 79 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 31 octobre 2011 2
10 août 2010 à 15:16
DARKELDA j'apprécis que t'ais pris en compte nos remarques :)
alors petit rajout à faire histoire de ne pas perdre du précieux temps de calcul : il faut rajouter une condition avant la boucle for (j'ai fait la même erreur dans mon exemple que j'ai rectifié dans mon dernier commentaire) car il ne sert à rien de rentrer dans la boucle for si $_nombre est pair ou un carré...
je te conseil donc de rassembler les conditions précédente dans un if(condition1 || condition2) suivi d'un else{for...

voilà c'est une petite optimisation non négligable pour un benchmark future ;)

en tout cas merci pour cette contribution et n'hésite pas à venir poster sur Codes-Sources : une source est toujours améliorable et tu pourras ainsi apprendre beaucoup de petites choses :-)
lynxtyle Messages postés 79 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 31 octobre 2011 2
9 août 2010 à 17:29
j'ai oublié un "else" avant "for($i = 3; $i < $sqrt; $i=$i+2)" afin d'éviter de rentrer dans la boucle pour rien si is_int($sqrt) ou is_int($_nombre/2) et gagner du temps de calcul (beaucoup de temps d'ailleur)

voilou amusez vous bien

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.