Quel est le problème avec ma méthode isPrime?
C'est mon isPrime
méthode:
private static boolean isPrime(int num) {
if (num % 2 == 0) return false;
for (int i = 3; i * i < num; i += 2)
if (num % i == 0) return false;
return true;
}
J'ai mis isPrime(9)
et il retourne true
. Quel est le problème avec la méthode?
source d'informationauteur usama8800
Vous devez vous connecter pour publier un commentaire.
Votre état de santé devrait être i * i <= num
Vous n'avez pas de numéro 9 dans votre compte pour 9<9 résultat sera faux. Mais vous devez vérifier que 9.
mon exemple:
Java 8: (Exemple avec l'expression lambda et cours d'eau)
Voici quelques conseils:
Le principal bug, c'est que vous n'avez jamais vérifier la divisibilité par
sqrt(num)
en raison d'un hors-par-une erreur dans la boucle.L'autre bug, c'est que vous ne considérez pas la
2
être le premier (ce qui est).(Fin) Sidenode:
Ce code est manquant
2
;2
est un primenumber. Tout divisible par2
n'est pas, à l'exception de la2
- oui, utilisation:Modifier votre code comme ceci ( vérification) :
la condition de la boucle avec
i * i < num
devrait êtrei * i <= num
la boucle n'est jamais exécutée afin qu'il renvoie directement à vrai
La boucle ne s'exécute pas. Il obtient mis fin à la première valeur de i, car 3 x 3 = 9
il ne remplit pas la condition i * i < n
i * i
est 9, et 9 dans pas moins de 9, donc pour la boucle n'est pas exécutée.vous pouvez tout simplement utiliser les if et else instruction pour vérifier pour voir si le nombre est premier. Il existe un modèle, tous les nombres sont des multiples de 2 ou 3 une fois votre numéro d'atteindre certaines limites.