Java Programme d'impression Prime Numbers à partir de 1 100

⚡ Résumé intelligent

Programme pour imprimer un nombre premier de 1 à 100 pouces Java Ce crible analyse toutes les valeurs d'un intervalle et affiche celles qui possèdent exactement deux diviseurs. Cet article explique sa définition, sa méthode de vérification, le programme complet, le crible d'Ératosthène et propose une comparaison de ses performances avec des résultats validés.

  • (I.e. Règle de définition : Un nombre premier est supérieur à 1 et divisible uniquement par 1 et par lui-même, ce qui exclut totalement 0 et 1.
  • (I.e. Balayage de portée : Une boucle externe parcourt de 2 à la limite supérieure et délègue chaque valeur à une méthode de vérification réutilisable.
  • Méthode booléenne : La fonction CheckPrime renvoie false pour le premier diviseur trouvé et true lorsque la boucle se termine sans correspondance.
  • Limite du diviseur : Tester jusqu'à la moitié de la valeur est correct, et s'arrêterping La racine carrée donne le même résultat beaucoup plus rapidement.
  • 🧮 Ensemble de résultats : Il existe exactement 25 nombres premiers entre 1 et 100, le dernier étant 97.
  • | Méthode de tamisage : Le crible d'Ératosthène marque les multiples dans un tableau booléen et s'exécute en temps O(n log log n).
  • 🧪 Pratique de vérification : Vérifiez que le point 2 est inclus et que le point 1 est exclu avant de faire confiance à une quelconque implémentation.

Prime Numbers 1 à 100 pouces Java

Qu'est-ce qu'un nombre premier?

A Nombre premier Un nombre premier est un nombre qui n'est divisible que par un ou par lui-même. C'est un nombre naturel supérieur à un qui n'est pas le produit de deux nombres naturels inférieurs. Par exemple, 11 n'est divisible que par un ou par lui-même. Parmi les autres nombres premiers, on trouve : 2, 3, 5, 7, 11, 13, 17, etc.

À noter: 0 et 1 ne sont pas des nombres premiers. 2 est le seul nombre premier pair.

Entre 1 et 100, il existe exactement 25 nombres premiers. Le tableau ci-dessous les regroupe par décennie, ce qui met en évidence la diminution progressive de leur nombre à mesure que les valeurs augmentent.

Autonomie Prime Numbers que vous avez
1 – 20 2, 3, 5, 7, 11, 13, 17, 19 8
21 – 40 23, 29, 31, 37 4
41 – 60 41, 43, 47, 53, 59 5
61 – 80 61, 67, 71, 73, 79 5
81 – 100 83, 89, 97 3

Comment imprimer Prime Numbers Entre 1 et 100 Programme en Java

Voici le Java programme pour imprimer les nombres premiers de 1 à 100 :

Logique du programme :

  • La principale méthode de programme de nombres premiers dans Java contient une boucle pour vérifier les nombres premiers entre 1 et 100 un par un.
  • La méthode principale appelle la méthode CheckPrime pour déterminer si un nombre est un nombre premier dans Java ou non.
  • Il faut diviser un nombre donné, par exemple 17, par les nombres compris entre 2 et 17 et vérifier le reste. Si le reste est 0, le nombre n'est pas premier.
  • Aucun nombre n'est divisible par plus de sa moitié. Il suffit donc de parcourir la moitié du nombre à vérifier. Si la valeur saisie est 17, sa moitié est 8.5, et la boucle parcourra les valeurs de 2 à 8.
  • If numberToCheck Si le nombre est entièrement divisible par un autre nombre, on renvoie faux et la boucle est interrompue.
  • If numberToCheck est premier, nous retournons vrai.
  • Dans la méthode principale pour les nombres premiers de 1 à 100 dans Java, vérifiez si isPrime est TRUE et ajoutez la valeur au nombre premierNumbersChaîne trouvée.
  • Enfin, imprimez les nombres premiers de 1 à 100 dans Java.

Le fait de séparer la vérification dans une méthode dédiée rend le programme réutilisable. La même méthode CheckPrime peut être appelée avec n'importe quelle limite supérieure en modifiant simplement la variable maxCheck.

public class PrimeNumbers {

    public static void main(String[] args) {

        int i;
        int num = 0;
        int maxCheck = 100; // maxCheck limit till which you want to find prime numbers
        boolean isPrime = true;

        //Empty String
        String primeNumbersFound = "";

        //Start loop 2 to maxCheck
        for (i = 2; i <= maxCheck; i++) {
            isPrime = CheckPrime(i);
            if (isPrime) {
                primeNumbersFound = primeNumbersFound + i + " ";
            }
        }
        System.out.println("Prime numbers from 1 to " + maxCheck + " are:");
        // Print prime numbers from 1 to maxCheck
        System.out.println(primeNumbersFound);
    }
    public static boolean CheckPrime(int numberToCheck) {
        int remainder;
        for (int i = 2; i <= numberToCheck / 2; i++) {
            remainder = numberToCheck % i;
            //if remainder is 0 then the number is not prime and we break the loop. Else continue the loop
            if (remainder == 0) {
                return false;
            }
        }
        return true;

    }

}

Production attendue:

Le résultat du nombre premier compris entre 1 et 100 dans le Java programme seront:

Prime numbers from 1 to 100 are:
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

La valeur 2 est transmise car la condition de la boucle interne est remplie. i <= 2 / 2 évalue à 2 <= 1, ce qui est faux d'emblée, donc la méthode renvoie vrai sans une seule division.

Version optimisée utilisant la borne de la racine carrée

Diviser jusqu'à la moitié du nombre est correct, mais cela représente un travail inutile. Les diviseurs apparaissent toujours par paires autour de la racine carrée ; par conséquent, tout facteur supérieur à √n a un homologue inférieur qui a déjà été testé.

public class PrimeNumbersOptimized {

    public static void main(String[] args) {
        int maxCheck = 100;
        int count = 0;
        StringBuilder result = new StringBuilder();

        for (int i = 2; i <= maxCheck; i++) {
            if (isPrime(i)) {
                result.append(i).append(" ");
                count++;
            }
        }

        System.out.println("Prime numbers from 1 to " + maxCheck + " are:");
        System.out.println(result.toString().trim());
        System.out.println("Total primes found: " + count);
    }

    public static boolean isPrime(int n) {
        if (n <= 1) return false;
        if (n == 2) return true;
        if (n % 2 == 0) return false;

        // test only odd divisors up to the square root
        for (int i = 3; i * i <= n; i += 2) {
            if (n % i == 0) return false;
        }
        return true;
    }
}

Sortie :

Prime numbers from 1 to 100 are:
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
Total primes found: 25

Astuce : StringBuilder remplace la concaténation répétée de chaînes de caractères à l'intérieur de la boucle. += L'opération sur une chaîne de caractères crée un nouvel objet, qui devient mesurable une fois que la limite supérieure atteint plusieurs milliers.

Imprimer Prime Numbers Utilisation du crible d'Ératosthène

Lorsque tous les nombres premiers d'un intervalle sont nécessaires, la division par essais successifs est inadaptée. Le crible d'Ératosthène construit un tableau booléen, marque les multiples de chaque nombre premier comme composés et lit les éléments non marqués.

La méthode fonctionne en trois étapes :

  1. Créez un tableau booléen de taille n+1 et supposez que chaque indice à partir de 2 est premier.
  2. En commençant par 2, marquez chaque multiple du nombre premier actuel comme composé.
  3. Passez à l'indice non marqué suivant et répétez jusqu'à ce que la racine carrée de n soit dépassée.
import java.util.Arrays;

public class SieveOfEratosthenes {

    public static void main(String[] args) {
        int n = 100;
        boolean[] composite = new boolean[n + 1];

        for (int p = 2; p * p <= n; p++) {
            if (!composite[p]) {
                // start at p*p because smaller multiples are already marked
                for (int multiple = p * p; multiple <= n; multiple += p) {
                    composite[multiple] = true;
                }
            }
        }

        StringBuilder result = new StringBuilder();
        for (int i = 2; i <= n; i++) {
            if (!composite[i]) {
                result.append(i).append(" ");
            }
        }

        System.out.println("Prime numbers from 1 to " + n + " are:");
        System.out.println(result.toString().trim());
    }
}

Sortie :

Prime numbers from 1 to 100 are:
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

Comparaison des trois approches

Les trois programmes affichent les mêmes 25 valeurs, le choix dépend donc entièrement de la taille de la plage.

Approche Complexité temporelle Mémoire supplémentaire Meilleure gamme
Division de l'essai à n/2 O(n²) O (1) Jusqu'à quelques milliers
Division par essais à √n O(n√n) O (1) Jusqu'à quelques centaines de milliers
Tamis d'Ératosthène O(n log log n) O (n) Des millions de valeurs

Consultez notre programme pour trouver nombres premiers à partir de n'importe quel nombre d'entrée lorsqu'il faut tester une valeur unique plutôt qu'une plage de valeurs. Pour d'autres exercices basés sur des boucles, consultez la section correspondante. la série de Fibonacci dans Java, le Java programme palindromeainsi que, Bubble Algorithme de tri dans JavaLe tableau booléen utilisé par le crible est expliqué plus en détail dans Java tableaux.

FAQ

Il y en a exactement 25. La séquence commence à 2 et se termine à 97, et la densité diminue régulièrement à mesure que les valeurs augmentent.

La condition de la boucle interne devient 2 <= 1, ce qui est immédiatement faux ; par conséquent, aucune division n'est effectuée et la méthode renvoie vrai. Il est essentiel de tester ce cas précis dans chaque implémentation.

Modifiez la variable maxCheck à 500. Pour commencer au-dessus de 1, ajustez plutôt la valeur initiale du compteur de la boucle externe et laissez la méthode de vérification inchangée.

Chaque multiple inférieur de p contient déjà un facteur premier plus petit et a été marqué lors d'un passage précédent. Commencer par p au carré évite de répéter ce travail.

Ils renvoient généralement une division d'essai, sauf si l'invite mentionne une large plage de valeurs ou une performance élevée. Indiquer la limite supérieure dans la requête produit généralement le tamis à la place.

Les nombres premiers sont choisis pour la taille des tables de hachage et des compartiments de caractéristiques car ils répartissent les clés uniformément et réduisent les collisions. Ils servent également d'initialisation aux fonctions de hachage utilisées dans la vectorisation des caractéristiques.

Résumez cet article avec :