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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 300 fois - Téléchargée 770 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
Messages postés
3
Date d'inscription
vendredi 14 août 2015
Statut
Membre
Dernière intervention
16 août 2015

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 ==.
Messages postés
3
Date d'inscription
vendredi 14 août 2015
Statut
Membre
Dernière intervention
16 août 2015

sauf que il y a un return avant le break. Le break n'est jamais exécuté.
Messages postés
75
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
30 juin 2013

en tout cas merci a tous pour ce moment de rêve que j'ai passé a lire les commentaires de cette source
Messages postés
79
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
31 octobre 2011
2
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 :-)
Messages postés
79
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
31 octobre 2011
2
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
Afficher les 44 commentaires

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.