TEST SUR NOMBRES PREMIERS

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 17 juil. 2007 à 12:36
ansu95 Messages postés 1 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 2 mars 2009 - 2 mars 2009 à 22:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43488-test-sur-nombres-premiers

ansu95 Messages postés 1 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 2 mars 2009
2 mars 2009 à 22:54
Public boolean isPremier(int n)
{
if(n<=1) return false;
for(int i = 2;i*i<=n;i++)
{
if (n%i ==0)
return false;
i++
}
return true;
}
theguitou Messages postés 75 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 14 janvier 2009 35
28 juil. 2007 à 20:12
while(i*i <= n)

Et c'est encore plus optimisé ...
atha2 Messages postés 3 Date d'inscription jeudi 16 novembre 2006 Statut Membre Dernière intervention 26 juillet 2007
26 juil. 2007 à 17:26
voici une version un peu plus optimisée:

public boolean isPremier(int n){
if(n < 2){//si inferieur à 2, on retourn faux
return false;
}
int i = 2;
/
while(i <= Math.sqrt(n)){//2 et 3 sont premier donc on ne rentre pas dans la boucle
if(n % i == 0){si un diviseur on retourne faux(i != && i <i <= Math.sqrt(n)<n)
return false;
}
i++;
}
return true;
}
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juil. 2007 à 14:09
non non, tu as tout à fait raison : ca sert à rien d'aller jusqu'à n / 2 : la racine de n est suffisante ce qui est bien plus efficace que n / 2 !
cs_lrequena Messages postés 10 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 24 juillet 2008
17 juil. 2007 à 14:00
une des optimisations simples possibles serait :

public boolean isPremier(int n)
{
boolean isPremier = true;

if (n < 2)
{
isPremier = false;
}
else
{
for (int i = 2; i < Math.sqrt(n)+1; i++)
{
if (n !i && n % i 0)
{
isPremier = false;

}
}
}
return isPremier;
}

Darksidious, dis moi si je me trompe ;)
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juil. 2007 à 12:36
Mouais, c'est l'algorithme le plus basique (et le moins optimisé surtout) qu'on peut trouver pour tester un nombre premier, mais bon... ca a au moins le mérite de fonctionner à tout les coups.
Rejoignez-nous