Dans mon développement habituel, je n'ai pas la chance de toucher à l'algorithme du manuel, j'ai donc écrit un code pour trouver un nombre premier en utilisant "le tamis d'Eratostène" comme exercice cérébral.
PrimeNumberFinder.java
static void printPrimeNumbers(int maxNumber) {
//Étape 1: Mettez "entier de 2 à la limite supérieure" dans la liste de recherche.
List<Integer> targetNumbers = IntStream.rangeClosed(2, maxNumber).boxed().collect(Collectors.toList());
//Liste des nombres premiers
List<Integer> primeNumbers = new ArrayList<Integer>();
int sqrt = (int) Math.sqrt(maxNumber);
//Étape 3: Continuez l'opération de tamisage jusqu'à ce que la première valeur de la liste de recherche atteigne la racine carrée de l'argument.
while(targetNumbers.get(0)<=sqrt) {
//Étape 2: Placez le premier nombre de la liste de recherche dans la liste des nombres premiers et filtrez les multiples de la liste de recherche.
int firstNum = targetNumbers.get(0);
primeNumbers.add(firstNum);
targetNumbers.removeIf(num -> (num % firstNum == 0));
}
//Étape 4: Déplacez les valeurs restantes dans la liste de recherche vers la liste des nombres premiers et terminez le processus.
primeNumbers.addAll(targetNumbers);
//Affichage des nombres premiers
System.out.println(primeNumbers.stream().map(pNum -> pNum.toString()).collect(Collectors.joining("\t")));
}
//Résultat de sortie lorsque 100 est spécifié dans l'argument de printPrimeNumbers
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Recommended Posts