In meiner üblichen Entwicklung habe ich keine Chance, den Lehrbuchalgorithmus zu berühren, deshalb habe ich einen Code geschrieben, um eine Primzahl zu finden, wobei "Eratostenes 'Sieb" als Gehirnübung verwendet wurde.
PrimeNumberFinder.java
static void printPrimeNumbers(int maxNumber) {
//Schritt 1: Fügen Sie "Ganzzahl von 2 bis Obergrenze" in die Suchliste ein.
List<Integer> targetNumbers = IntStream.rangeClosed(2, maxNumber).boxed().collect(Collectors.toList());
//Primzahlliste
List<Integer> primeNumbers = new ArrayList<Integer>();
int sqrt = (int) Math.sqrt(maxNumber);
//Schritt 3: Setzen Sie den Siebvorgang fort, bis der erste Wert in der Suchliste die Quadratwurzel des Arguments erreicht.
while(targetNumbers.get(0)<=sqrt) {
//Schritt 2: Fügen Sie die erste Nummer in der Suchliste in die Primzahlliste ein und zeigen Sie Vielfache aus der Suchliste an.
int firstNum = targetNumbers.get(0);
primeNumbers.add(firstNum);
targetNumbers.removeIf(num -> (num % firstNum == 0));
}
//Schritt 4: Verschieben Sie die in der Suchliste verbleibenden Werte in die Primzahlenliste und beenden Sie den Vorgang.
primeNumbers.addAll(targetNumbers);
//Anzeige von Primzahlen
System.out.println(primeNumbers.stream().map(pNum -> pNum.toString()).collect(Collectors.joining("\t")));
}
//Ausgabeergebnis, wenn im Argument von printPrimeNumbers 100 angegeben ist
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