[Java] Finde die Primzahl mit dem Eratostenes-Sieb (Teil 2)

Einführung

Der Code von vorheriger Beitrag ist ein kostenintensiver Code, der "die gesamte Liste durchsucht, teilt und durchsucht", wie von @swordone hervorgehoben. Es stellte sich heraus. Basierend auf dem Hinweis von @swordone habe ich den Code grundlegend korrigiert.

Code

Die Unterschiede zum vorherigen Code sind wie folgt.

PrimeNumberFinder.java


static void printPrimeNumbers2(int maxNumber) {

	//Schritt 1: Fügen Sie "Ganzzahl von 2 bis Obergrenze" in die Suchliste ein.
	boolean[] targetNumbers = new boolean[maxNumber + 1];
	Arrays.fill(targetNumbers, true);
	targetNumbers[0] = false;
	targetNumbers[1] = false;

	//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.
	for(int i=2; i<=sqrt; i++) {
		//Schritt 2: Machen Sie die erste Zahl in der Suchliste zu einer Primzahl und zeigen Sie Vielfache aus der Suchliste an.
		//* Zu diesem Zeitpunkt ist die bereits ausgeblendete Nummer (false) ausgeschlossen.
		int firstNum = i;
		if (targetNumbers[i]) {
			for (int j=i*firstNum; j<targetNumbers.length; j+=firstNum) {
				targetNumbers[j] = false;
			}
		}
	}

	//Schritt 4: Verschieben Sie die in der Suchliste verbleibenden Werte in die Primzahlenliste und beenden Sie den Vorgang.
	for (int i=2; i<targetNumbers.length; i++) {
		if (targetNumbers[i]) {
			primeNumbers.add(i);
		}
	}

	//Anzeige von Primzahlen
	System.out.println(primeNumbers.stream().map(pNum -> pNum.toString()).collect(Collectors.joining("\t")));
}

Wie schnell war es

Die Obergrenze ist10^2 Die Obergrenze ist10^3 Die Obergrenze ist10^4 Die Obergrenze ist10^5
Letzter Code 54ms 55ms 61ms 102ms
Dieser Code 0ms 1ms 1ms 9ms

Zusammenfassung

Recommended Posts

[Java] Finde die Primzahl mit dem Eratostenes-Sieb (Teil 2)
[Java] Finden Sie die Primzahl mit dem Eratostenes-Sieb
So finden Sie Java-Primzahlen
Berechnen Sie Primzahlen in Java
Erstellen Sie mit JAVA eine unveränderliche Klasse
Java mit Ramen lernen [Teil 1]
Serververarbeitung mit Java (Einführung Teil.1)
Führen Sie in Java8 geschriebene Anwendungen in Java6 aus
[Java] Erstellen Sie mit Gradle ein ausführbares Modul
Einführung in Java ab 0 Teil 1
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
Bis INSERT S3-Objekt in EC2 DB mit Lambda @ java: Java [Teil 2]
Bis das S3-Objekt mit Lambda @ java in Java eingefügt wird: Java [Teil 1]
Schnelles Lernen von Java "Einführung?" Teil 1 Erstellen einer Umgebung
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
Erstellen Sie eine E2E-Testumgebung mit Selenium (Java).
[Algorithmus] N Zahlen mit einem Intervall von X.