TEST SUR NOMBRES PREMIERS

Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
- - Dernière réponse : 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

Afficher la suite 
ansu95
Messages postés
1
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
2 mars 2009
-
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
22 -
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
-
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
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
73 -
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
-
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 ;)