[Java] Trouvez le nombre premier avec le tamis Eratostenes (Partie 2)

introduction

Le code de publication précédente est un code coûteux qui "recherche toute la liste, la divise et la tamise" comme le souligne @swordone. Cela s'est avéré. Donc, sur la base de l'indice de @swordone, j'ai apporté une correction majeure au code.

code

Les différences avec le code précédent sont les suivantes.

PrimeNumberFinder.java


static void printPrimeNumbers2(int maxNumber) {

	//Étape 1: Mettez "entier de 2 à la limite supérieure" dans la liste de recherche.
	boolean[] targetNumbers = new boolean[maxNumber + 1];
	Arrays.fill(targetNumbers, true);
	targetNumbers[0] = false;
	targetNumbers[1] = false;

	//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.
	for(int i=2; i<=sqrt; i++) {
		//Étape 2: Faites du premier nombre de la liste de recherche un nombre premier et des multiples d'écran de la liste de recherche.
		//* Pour le moment, le numéro qui a déjà été exclu (faux) est exclu.
		int firstNum = i;
		if (targetNumbers[i]) {
			for (int j=i*firstNum; j<targetNumbers.length; j+=firstNum) {
				targetNumbers[j] = false;
			}
		}
	}

	//Étape 4: Déplacez les valeurs restantes dans la liste de recherche vers la liste des nombres premiers et terminez le processus.
	for (int i=2; i<targetNumbers.length; i++) {
		if (targetNumbers[i]) {
			primeNumbers.add(i);
		}
	}

	//Affichage des nombres premiers
	System.out.println(primeNumbers.stream().map(pNum -> pNum.toString()).collect(Collectors.joining("\t")));
}

Combien de temps cela a-t-il été?

La limite supérieure est10^2 La limite supérieure est10^3 La limite supérieure est10^4 La limite supérieure est10^5
Dernier code 54ms 55ms 61ms 102ms
Ce code 0ms 1ms 1ms 9ms

Résumé

Recommended Posts

[Java] Trouvez le nombre premier avec le tamis Eratostenes (Partie 2)
[Java] Trouvez le nombre premier avec le tamis Eratostenes
Comment trouver les nombres premiers Java
Calculer des nombres premiers en Java
Créer une classe immuable avec JAVA
Java pour apprendre avec les ramen [Partie 1]
Traitement serveur avec Java (Introduction partie 1)
Exécuter des applications écrites en Java8 en Java6
[Java] Créer un module exécutable avec Gradle
Introduction à Java à partir de 0 Partie 1
AWS Lambda (Lambda) Partie 1 avec Java pour démarrer maintenant
Jusqu'à ce que l'objet S3 soit INSERT dans EC2 DB avec Lambda @ java: Java [Partie 2]
Jusqu'à INSERT S3 objet dans EC2 DB avec Lambda @ java: Java [Partie 1]
Apprentissage rapide de Java "Introduction?" Partie 1 Création d'un environnement
JSON avec Java et Jackson Part 2 XSS mesures
Créer un environnement de test E2E avec Selenium (Java)
[Algorithme] N nombres avec un intervalle de X