Comment fonctionne ce nombre premier en Java?
L'extrait de code ci-dessous vérifie si un nombre est un nombre premier. Quelqu'un peut m'expliquer pourquoi cela fonctionne? Ce code a été sur un guide d'étude nous a donnée, pour un Java examen.
public static void main(String[] args)
{
int j = 2;
int result = 0;
int number = 0;
Scanner reader = new Scanner(System.in);
System.out.println("Please enter a number: ");
number = reader.nextInt();
while (j <= number / 2)
{
if (number % j == 0)
{
result = 1;
}
j++;
}
if (result == 1)
{
System.out.println("Number: " + number + " is Not Prime.");
}
else
{
System.out.println("Number: " + number + " is Prime. ");
}
}
source d'informationauteur Adam Staples
Vous devez vous connecter pour publier un commentaire.
Théorie générale
La condition
if (number % j == 0)
demande sinumber
est exactement divisible parj
La définition d'un premier est
donc, si vous testez tous les nombres entre 2 et nombre, et aucun d'entre eux sont exactement divisible, alors c'est un premier, sinon il ne l'est pas.
Bien sûr, vous n'avez pas à aller tout le chemin à la
number
parce quenumber
ne peut pas être exactement divisible par quelque chose au-dessus de la moitiénumber
.Des sections spécifiques
Boucle While
Présent article court à travers les valeurs de l'augmentation de j, si nous prétendons que
number
= 12, alors il sera exécuté à traversj
= 2,3,4,5,6Si l'instruction
Cette section définit
result
à 1, si, à tout point denumber
est exactement divisible parj
.result
n'est jamais réinitialiser à 0 une fois qu'il a été mis à 1.D'autres améliorations
Bien sûr, vous pouvez l'améliorer encore plus, parce que vous avez réellement besoin de ne pas aller plus haut que
sqrt(number)
mais cet extrait a décidé de ne pas le faire; la raison pour laquelle vous avez besoin de ne pas aller plus haut est parce que si (par exemple) 40 est exactement divisible par 4, c'est 4*10, vous n'avez pas besoin de test pour les deux 4 et 10. Et de ces paires on sera toujours en dessous desqrt(number)
.Il est également intéressant de noter qu'ils semblent avoir l'intention d'utiliser
result
comme un booléen, mais en fait utilisé des entiers compris entre 0 et 1 pour représenter le vrai et le faux à la place. Ce n'est pas une bonne pratique.J'ai essayé de commenter chaque ligne pour expliquer le processus en cours, j'espère que ça aide!
Il fonctionne par itération sur tous les nombre entre 2 et la moitié du nombre entré (depuis n'importe quel nombre plus grand que le nombre d'entrées/2 (mais moins que celle de l'entrée) donnerait une fraction). Si le nombre d'entrée divisée par
j
donne un 0 reste (if (number % j == 0)
) puis le nombre d'entrée est divisible par un nombre autre que 1 ou lui-même. Dans ce cas, le résultat est mis à 1 et le nombre n'est pas un nombre premier.Java java.les mathématiques.BigInteger classe contient une méthode isProbablePrime(int certitude) pour vérifier la primalité d'un nombre.
isProbablePrime(int certainty)
: Une méthode enBigInteger
de la classe pour vérifier si un nombre donné est premier.Pour
certainty = 1
, il retourne true siBigInteger
est le premier et false siBigInteger
est composite.De Miller–Rabin de primalité algorithme est utilisé pour vérifier la primalité de cette méthode.
Output: 83 is prime : true
Pour plus d'informations, voir mon blog.
N'essayez